인천의 자유인

[Python] 모의고사 - 프로그래머스(Lv.1) 본문

Python/Python코딩테스트

[Python] 모의고사 - 프로그래머스(Lv.1)

Youngook 2024. 7. 16. 08:24
728x90
반응형

반응형

 

 

 

나의 문제 풀이

def solution(answers):
    one = [1,2,3,4,5]
    two = [2,1,2,3,2,4,2,5]
    three = [3,3,1,1,2,2,4,4,5,5]
    lis1 = [a - b for a, b in zip(answers, one*10000)]
    lis2 = [a - b for a, b in zip(answers, two*10000)]
    lis3 = [a - b for a, b in zip(answers, three*10000)]
    answer = {'1':lis1.count(0), '2':lis2.count(0), '3':lis3.count(0)}
    result = sorted(answer)
    a = max(answer, key=answer.get)
    return list(map(int,[i for i in result if answer[i] > 0 and answer[i] == answer[a]]))

 

먼저 첫 번째 수포자, 두번째 수포자 그리고 세번째 수포자의 찍는 패턴을 리스트에 적었습니다.

 

그리고 각각의 one, two, three리스트를 각각 빼서 (리스트 길이가 맞지 않으면 적은 쪽 길이로 맞춰집니다.) 0이 나오는 원소의 개수를 구합니다. 0이 나온다는 것은 그 자리 원소가 answers의 같은 자리 원소와 같다는 의미 입니다.

 

0원소의 개수를 answer이라는 딕셔너리에 저장을 합니다. 딕셔너리에서 키 '1'은 수포자1을 의미하며 '2'는 수포자 2를 의미하고 '3'은 수포자 3을 의미합니다. 그리고 각각 키의 값들을 0이 나온 개수, 즉 일치하는 원소 개수를 대입합니다. 그런 이후 sorted를 통해 정렬을 합니다. 일치하는 수가 가장 많은 사람이 가장 앞에 와야하기 때문입니다.

 

이것이 완료가 되었으면 이 딕셔너리에서 가장 큰 값을 변수 a에 저장을 합니다. 그리고 가장 큰 값 a와 같다면 리스트에 추가하여 최종적으로 return을 합니다.

 

이해를 위해서 실제로 코드 실행을 해보시길 추천합니다!


처음에 문제를 잘못 이해해서 고생을 했었습니다. 저는 리스트에 순위를 적어주는 것이라 생각을 해서 그렇게 계속했는데 코드 실행 부분에서 통과해서 제출하면 합격을 할 수 없어서 어려워했습니다. 그러나 문제를 제대로 이해해서 결국 풀 수 있게 되었습니다.

728x90
반응형