모의고사

김민석·2021년 2월 19일
0

오답노트 Lv.1

목록 보기
3/8

해당 문제는
특정한 패턴을 가지고 문제를 찍는 3사람이 주어졌을 때, 랜덤하게 주어진 정답과 비교하여 가장 많은 문제를 많이 맞힌 사람을 리턴하는 문제였다.

def solution(answers):
    f=[1,2,3,4,5]
    s=[2,1,2,3,2,4,2,5]
    t=[3,3,1,1,2,2,4,4,5,5]
    result={1:0,2:0,3:0}
    for i in range(len(answers)):
        if answers[i] == f[i%5]:
            result[1] += 1
        if answers[i] == s[i%8]:
            result[2] += 1
        if answers[i] == t[i%10]:
            result[3] += 1

    return [key for key,value in result.items() if value == max(result.values())]

내가 생각한 답은 이것이다.
사실 처음부터 이렇게 푼 것은 아니고 좀 더 복잡한 방법으로 풀었었다.
간략하게 설명하자면 answers의 길이와 비슷하게 만든 후, 비교하는 방식을 취하였다.

허나, 다른 사람의 풀이를 보고 조금 간략하게 만들고, 또한 가독성을 높일 수 있을 것 같아서, 개선한 코드를 같이 첨부한다.

def solution(answers):
    f=[1,2,3,4,5]
    s=[2,1,2,3,2,4,2,5]
    t=[3,3,1,1,2,2,4,4,5,5]
    result={1:0,2:0,3:0}
    for i,answer in enumerate(answers):
        if answer == f[i%5]:
            result[1] += 1
        if answer == s[i%8]:
            result[2] += 1
        if answer == t[i%10]:
            result[3] += 1
    
    return [key for key,value in result.items() if value == max(result.values())]

차이는 단 하나, enumerate다.
다른 사람의 코드를 읽어보니 enumerate를 사용했을 때, 훨씬 코드가 읽기 쉬워보였다.
다음에

index와 element를 동시에 사용 할 일이 있을 때

enumerate를 사용해보자!

0개의 댓글