👉 사용 언어 : PYTHON3
모의고사
✅ Solution
def solution(answers):
ans = [0, 0, 0]
dic = {1: [1,2,3,4,5], 2: [2,1,2,3,2,4,2,5], 3: [3,3,1,1,2,2,4,4,5,5]}
# 5, 8, 10의 최소 공배수 = 40
for i in range(len(answers)):
for j in dic:
if answers[i] == dic[j][i%len(dic[j])]:
ans[j-1] += 1
for k in range(3):
if max(ans[:3]) == ans[k]:
ans.append(k+1)
return sorted(ans[3:])
👉 문제 설명 및 제한 사항
- 수포자 (= 문제 푸는 사람) : 3명
- 1번 : 1, 2, 3, 4, 5, ... 반복
- 2번 : 2, 1, 2, 3, 2, 4, 2, 5, ... 반복
- 3번 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 반복
- 매개변수 : 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers
- 길이 <= 10,000
- 원소 : 1 ~ 5
- 리턴값 : 가장 많은 문제를 맞힌 사람이 누구인지❓
- 가장 높은 점수를 받은 사람이 여럿일 경우, 오름차순 정렬
👉 아이디어
- 1번은 5개 씩, 2번은 8개 씩, 3번은 10개 씩 반복되는 숫자로 정답을 찍는다.
- answers 배열 길이만큼 반복문을 돌리고 내부에서 dic 딕셔너리의 값을 차례로 뽑는다.
- 현재 answers 원소와 dic 의 key에 맵핑된 value 와 같으면 ans 배열[key-1] 에 +1을 카운트한다.
- 딕셔너리 dic의 각 value 는 1번, 2번, 3번 수포자가 찍는 반복되는 숫자 리스트를 저장하고 있다.
- 반복문 내에서 [i%len(dic[j])] 는 value의 숫자리스트를 계속 순회하도록 한다.
- (EX) 1번 수포자 > [0%5] = [0] = 1, [1%5] = [1] = 2, [2%5] = [2] = 3, [3%5] = [3] = 4, [4%5] = [4] = 5, [5%5] = [0] = 1, ... 반복
- ans를 순회하며 max값 과 같은 값 의 인덱스 를 ans에 추가한다.
- 이때 주의해야할 것은, ans에 계속 값을 추가하는 방식으로 구현했기 때문에 ans가 변한다.
- max() 를 사용할때 ans가 아닌 초기 ans값인 ans[:3] 을 써줘야한다.
- 리턴해야할 값은 나중에 ans에 추가한 값 들이므로 ans[3:] 을 통해 범위를 제한하여 정렬 한 후, 리턴한다.
✅ 다른 사람 풀이 참고
def solution(answers):
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
score = [0, 0, 0]
result = []
for idx, answer in enumerate(answers):
if answer == pattern1[idx%len(pattern1)]:
score[0] += 1
if answer == pattern2[idx%len(pattern2)]:
score[1] += 1
if answer == pattern3[idx%len(pattern3)]:
score[2] += 1
for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)
return result
👉 깨달은 것 / 알게된 것
- enumerate를 이용하면 idx와 컬렉션의 원소를 튜플 형태로 반환한다.
- idx와 값을 맵핑해야한다면, enumerate를 제일 먼저 떠올리자❗
- 배열을 하나 더 정의 하더라도, 기존 배열에 추가해서 슬라이싱을 쓰고 - 이런 방법보다 더 깔끔한 코드를 작성할 수 있다.
'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글
| [Lv2.] 정렬 - 가장 큰 수 (0) | 2024.03.16 |
|---|---|
| [SQL-SELECT] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.03.14 |
| [Lv2.] 완전탐색 - 소수 찾기 (0) | 2024.03.08 |
| [Lv2.] N개의 최소공배수 (0) | 2024.03.05 |
| [Lv2.] 모음사전 (0) | 2024.03.01 |