728x90
문제 :
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, .
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
1차 풀이 :
각 학생들의 패턴에 맞게 답안과 비교하면 되는 간단한 문제이다. 다만, 처음에는 답안 길이만큼 리스트를 미리 길게 늘려놓는 방식을 생각했는데 이럴 경우, 메모리를 불필요하게 많이 쓸 수 있다.
def solution(answers):
p1=[1,2,3,4,5] * len(answers)
p2=[2,1,2,3,2,4,2,5] * len(answers)
p3=[3,3,1,1,2,2,4,4,5,5] * len(answers)
answer=[0,0,0]
for i in range(len(answers)):
if p1[i]==answers[i]:
answer[0]+=1
if p2[i]==answers[i]:
answer[1]+=1
if p3[i]==answers[i]:
answer[2]+=1
max_val=max(answer)
result=[i+1 for i,score in enumerate(answer) if score == max_val]
return result
2차 풀이 :
미리 리스트의 길이를 길게 늘리지 않고, i를 각 패턴의 길이로 나눈 나머지로 인덱싱하는 방식으로 진행하면 메모리가 훨씬 절약되어 이 방법이 더 좋을 것 같다.
def solution(answers):
p1=[1,2,3,4,5]
p2=[2,1,2,3,2,4,2,5]
p3=[3,3,1,1,2,2,4,4,5,5]
answer=[0,0,0]
for i in range(len(answers)):
if p1[i%len(p1)]==answers[i]:
answer[0]+=1
if p2[i%len(p2)]==answers[i]:
answer[1]+=1
if p3[i%len(p3)]==answers[i]:
answer[2]+=1
max_val=max(answer)
result=[i+1 for i,score in enumerate(answer) if score == max_val]
return result728x90
'알고리즘' 카테고리의 다른 글
| [프로그래머스] H-Index (0) | 2026.02.26 |
|---|---|
| [프로그래머스] 가장 큰 수 (0) | 2026.02.26 |
| [프로그래머스] 주식 가격 (0) | 2026.02.25 |
| [프로그래머스] 프로세스 (0) | 2026.02.23 |
| [프로그래머스] 전화번호 목록 (0) | 2026.02.20 |