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

Tony Kim·2022년 1월 15일
0
post-thumbnail

[프로그래머스]

Lv.1 모의고사

1.문제

input 실제 답안 리스트
output 수포자의 답안 리스트 반복해서(실제 답안길이만큼) 가장 문제 많이 맞힌 사람 return (동점가능)

2. 풀이

반복문을 통해 실제 답안값과 각 수포자의 값을 비교했다.
이때 수포자의 답안코드가 일정 인덱스만큼 증가할수록 바뀌어야하기 때문에 각 수포자의 리스트마다 index를 다르게 설정했다.

return값의 경우 max값과 각 수포자의 점수를 비교하여 mamx값과 점수가 동일할시 list에 수포자를 추가하였다.

-> 런타임 에러

3. 코드

내 코드

def solution(answers):
    answer = []
    s1 = [1,2,3,4,5]
    s2 = [2,1,2,3,2,4,2,5]
    s3 = [3,3,1,1,2,2,4,4,5,5]
    ss1, ss2, ss3 = 0, 0, 0
    a = 0
    b = 0
    c = 0
    i = 0    
    while i < len(answers):
        if answers[i] == s1[a]:
            ss1 += 1
            if a == 4:
                a = 0
        if answers[i] == s2[b]:
            ss2 += 1
            if b == 7:
                b = 0
        if answers[i] == s3[c]:
            ss3 += 1
            if c == 9:
                c = 0
        i += 1
        a += 1
        b += 1
        c += 1
    maxnum = max(ss1, ss2, ss3)
    if maxnum == ss1:
        answer.append(1)
    if maxnum == ss2:
        answer.append(2)
    if maxnum == ss3:
        answer.append(3)
    return answer

모범코드

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)

반성)

  • list 합치기의 경우 list = list + list 로 함
  • index값을 설정할때 불필요하게 if문으로 체크하지 않고 i를 len(수포자답안리스트)로 나눈 나머지 값을 index로 설정하면 시간복잡도를 더 줄일 수 있었다...흑흑
  • max값의 경우 score를 따로 저장하는 것이 아니라 score[0,0,0]의 배열에 값을 하나씩 더하고 for문으로 score 리스트를 순회하며 해당 값과 max값이 동일할 경우 result에 append하는 식의 방법이 더 효율적이고 코드도 깔끔해 보임
profile
Back-end-dev

0개의 댓글