알고리즘

[프로그래머스] 모의고사

예림밈 2026. 3. 3. 13:14
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 result
728x90

'알고리즘' 카테고리의 다른 글

[프로그래머스] H-Index  (0) 2026.02.26
[프로그래머스] 가장 큰 수  (0) 2026.02.26
[프로그래머스] 주식 가격  (0) 2026.02.25
[프로그래머스] 프로세스  (0) 2026.02.23
[프로그래머스] 전화번호 목록  (0) 2026.02.20