본문 바로가기

Algorithm/코딩테스트 고득점 Kit

[고득점 Kit / 완전탐색] 모의고사

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

전형적인 완전탐색 문제이다. 각 수포자의 패턴을 시험 문제 길이에 맞게 반복하고, 주어진 정답과 비교하여 맞힌 문제 수를 계산한 후, 가장 많이 맞힌 문제 수를 찾아내고, 그 점수를 가진 수포자들을 배열에 담아 반환하면 된다.

 

def solution(answers):
    # 수포자들의 답안 패턴
    supo_1 = [1, 2, 3, 4, 5]
    supo_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    supo_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    # 각 수포자가 맞힌 문제 수를 저장하는 리스트
    scores = [0, 0, 0]

    # 정답과 수포자들의 답안 비교
    for i in range(len(answers)):
        if answers[i] == supo_1[i % len(supo_1)]:
            scores[0] += 1
        if answers[i] == supo_2[i % len(supo_2)]:
            scores[1] += 1
        if answers[i] == supo_3[i % len(supo_3)]:
            scores[2] += 1

    # 가장 높은 점수를 가진 수포자 찾기
    max_score = max(scores)
    result = [i + 1 for i in range(3) if scores[i] == max_score]

    return result

 

 

i % len(supo_1) 부분을 이해해보자.

0 % len(supo_1) = 0

1 % len(supo_1) = 1

2 % len(supo_1) = 2

3 % len(supo_1) = 3

4 % len(supo_1) = 4

5 % len(supo_1) = 0

6 % len(supo_1) = 1

7 % len(supo_1) = 2

.

.

.

(반복)

 

위와 같이 나머지 연산을 이용하면, 한정된 수포자의 답안 패턴(supo_1)을 가지고 전체 답안과 비교할 수 있다.