[프로그래머스_Python] 완전탐색 - 모의고사 [Lv. 1]

황준성·2024년 11월 5일
0

프로그래머스

목록 보기
8/14

문제

문제 이해

정해진 숫자 패턴이 있는 문제를 푸는 방식은 보통 정해져 있는 것 같다. 1번 수포자, 2번 수포자, 3번 수포자는 각각의 자신만의 패턴으로 번호를 찍는다. 이런 경우 처음에는 이걸 어떻게 구현을 해야할지 감이 오지 않지만, 이런 문제를 몇번 풀다보면 슬슬 감이 오기 시작한다. 일단 중요한 것은 문제를 보고, 이게 어떤 유형이고 어떤 구조를 이용해야 할까를 고민해야 한다는 것이다. 이코테에서 시뮬레이션 문제를 풀이할 때도 2차원 리스트 안에서 특정 움직임을 할때 방향 벡터를 만들어서 비슷하게 문제를 풀이한다. 이 문제도 비슷하다.

1, 2, 3번 수포자의 정답을 찍는 패턴을 각각의 배열에 저장한다.
이때 패턴의 길이가 모두 같으면 인덱스를 따로 만들 필요는 없겠지만, 이 문제에서는 각 리스트의 길이가 다르기 때문에 인덱슬를 다른 값으로 만들어줘야 한다. 그래서 각각에 맞는 인덱스를 만들고, 정답처리를 카운트 해준 후에 인덱스를 늘려준다.

어려운 문제는 아니지만, 문제를 풀어오면서 감을 좀 익혀야 쉽게 풀 수 있는 문제라고 생각한다.

코드

# 프로그래머스_완전탐색_모의고사
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]
    
    # 각각 정답을 카운트할 3칸짜리 리스트
    cnt_list = [0] * 3
    
    # 패턴의 길이가 다르므로 인덱스 따로 할당
    idx1 = 0
    idx2 = 0
    idx3 = 0
    
    for value in answers:
        
        # 수포자 1
        if value == person1[idx1]:
            cnt_list[0] += 1
        # 수포자 2
        if value == person2[idx2]:
            cnt_list[1] += 1
        # 수포자 3
        if value == person3[idx3]:
            cnt_list[2] += 1
            
        idx1 += 1
        idx2 += 1
        idx3 += 1
        
        # 인덱스 범위 초과시 0으로 초기화
        if idx1 >= len(person1):
            idx1 = 0
        if idx2 >= len(person2):
            idx2 = 0
        if idx3 >= len(person3):
            idx3 = 0
            
    # 카운트 제일 높은 것 출력
    for i in range(3):
        if max(cnt_list) == cnt_list[i]:
            answer.append(i+1)
        
    
    return answer
profile
Make progress

0개의 댓글