[프로그래머스 42840 파이썬] 모의고사 (level 1, 완전탐색)

배코딩·2022년 3월 14일
0

PS(프로그래머스)

목록 보기
16/36

알고리즘 유형 : 완전탐색
풀이 참고 없이 스스로 풀었나요? : O

https://programmers.co.kr/learn/courses/30/lessons/42840?language=python3




소스 코드(파이썬)

def solution(answers):
    answer = []
    
    person1 = [1, 2, 3, 4, 5]
    person2 = [2, 1, 2, 3, 2, 4, 2, 5]
    person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    count = [0, 0, 0]
    
    for i in range(len(answers)):
        ans = answers[i]
        
        if ans == person1[i%len(person1)]:
            count[0] += 1
        if ans == person2[i%len(person2)]:
            count[1] += 1
        if ans == person3[i%len(person3)]:
            count[2] += 1
            
    tmp = max(count)
    
    for idx, c in enumerate(count):
        if c == tmp:
            answer.append(idx+1)
    
    return answer



풀이 요약

  1. 세 사람의 찍기 패턴을 파악해서, 패턴 한 세트만 리스트에 각각 저장해놓는다.

  1. 이제 answers를 순회하면서, 각 단계에서 세 사람이 잘 찍었는지를 판별하여 count의 세 요소에 각각 카운팅해줄 것이다.

    이 때, 패턴 한 세트의 길이가 answers보다 짧을 수 있으므로, 길이를 넘었을 때 패턴의 처음으로 돌아가서 답과 비교해줘야한다. 이 것은 모듈로 연산으로 구현 가능하다.


  1. 이 후 count의 max값을 첫 번째 인덱스(첫 번째 사람)부터 비교해나가면서 answer에 사람 번호를 append한다.


배운 점, 어려웠던 점

  • for를 순회하면서 단계를 나타내는 idx와, 그 idx에 해당하는 배열의 값을 동시에 활용하고 싶을 때 enumerate를 활용하여 코드를 단순화하는 테크닉을 배웠다.
profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글