🗂️ 문제
링크: https://school.programmers.co.kr/learn/courses/30/lessons/42840
💡 접근법
학생 수는 3명이고, 각각의 학생이 찍는 답은 일정한 주기로 반복하므로 한 주기에 대해서만 리스트를 생성한다.
이후 맞는 값의 개수를 저장하는 answer_cnt 딕셔너리를 선언한다.
answer 값을 순회하면서 학생이 찍은 답과 같으면 cnt를 1 증가시킨다.
이후 값에 대해 딕셔너리를 내림차순 정렬한다.
내림차순으로 정렬되었기 때문에 0번 인덱스에 해당하는 키가 가장 정답을 많이 맞춘 학생을 의미한다. 하지만 동점자가 존재할 수 있으므로 max 변수를 통해 이를 확인한다.
😎 내 코드
def solution(answers):
answer = []
per1 = [1, 2, 3, 4, 5]
per2 = [2, 1, 2, 3, 2, 4, 2, 5]
per3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
per1 *= len(answers) // len(per_1) + 1
per2 *= len(answers) // len(per_2) + 1
per3 *= len(answers) // len(per_3) + 1
answer_cnt = {"1": 0, "2": 0, "3": 0}
for i, a in enumerate(answers):
if a == per1[i]:
answer_cnt["1"] += 1
if a == per2[i]:
answer_cnt["2"] += 1
if a == per3[i]:
answer_cnt["3"] += 1
answer_cnt = sorted(answer_cnt.items(), key=lambda x: x[1], reverse=True)
max = 0
for k, v in answer_cnt:
if max <= v:
max = v
answer.append(int(k))
return answer
👀 배운 코드
def solution(answers):
answer = []
per1 = [1, 2, 3, 4, 5]
per2 = [2, 1, 2, 3, 2, 4, 2, 5]
per3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
answer_cnt = {"1": 0, "2": 0, "3": 0}
for i, a in enumerate(answers):
if a == per1[i%5]:
answer_cnt["1"] += 1
if a == per2[i%8]:
answer_cnt["2"] += 1
if a == per3[i%10]:
answer_cnt["3"] += 1
answer_cnt = sorted(answer_cnt.items(), key=lambda x: x[1], reverse=True)
max = 0
for k, v in answer_cnt:
if max <= v:
max = v
answer.append(int(k))
return answer
🧐 배운 점
- 비교할 리스트를 새로 만들지 않고 나머지 연산을 통해 인덱스를 계산하여 해당 인덱스에 대한 값을 비교하는 방법
ex) per1의 리스트의 길이는 5이므로 5로 나머지 연산을 수행한다. if a == per1[i%5]: - 딕셔너리 값으로 정렬
d = sorted(d.items(), key=lambda x: x[1])
'Algorithm > Programmers' 카테고리의 다른 글
[완전탐색] 프로그래머스 Lv2. 소수 찾기 - Python (0) | 2024.03.21 |
---|---|
[완전탐색] 프로그래머스 Lv2. 카펫 - Python (0) | 2024.03.21 |
[정렬] 프로그래머스 Lv.2 가장 큰 수 - Python (2) | 2024.03.16 |
[힙] 프로그래머스 Lv2. 더 맵게 - Python (0) | 2024.03.07 |
[스택/큐] 프로그래머스 Lv1. 같은 숫자는 싫어 - JAVA (0) | 2024.02.19 |