백준 19949 영재의 시험

청천·2022년 9월 4일
0

백준

목록 보기
13/41

문제 접근
모든 경우의 수를 보는 방식을 사용했다.

1 2 3 4 5 6 7 8 9
o o o
o o x
o x o
o x x
x o o
x o x
x x o
x x x

이런 식으로 풀고자 했으며
모든 경우의 수를 보는 코드를 먼저 작성해 봤다.

import sys; input = sys.stdin.readline

answer_list = list(map(int, input().split()))
young_jee = [0] * 10
num_of_cases = 0


def recur(cur, consecutive_num):
    global num_of_cases
    if cur == 10:
        socore = 0
        for ans, young in zip(answer_list, young_jee):
            if ans == young:
                socore += 1
        if socore >= 5:
            num_of_cases += 1
        return
    for random_ans in range(1, 6):
        young_jee[cur] = random_ans
        if cur == 0:
            recur(cur + 1, 1)
        if cur == 1:
            if young_jee[cur-1] == young_jee[cur]:
                recur(cur + 1, consecutive_num + 1)         # 연속된 수를 골랐을 때
            else:
                recur(cur + 1, 1)                           # 연속된 수를 고르지 않았을 때

        if cur >= 2:
            if consecutive_num == 2:
                if young_jee[cur-1] == young_jee[cur]:
                    consecutive_num = 1
                    continue                                # 다음 수를 골라 보자
                else:
                    recur(cur + 1, 1)
            else:
                if young_jee[cur - 1] == young_jee[cur]:
                    recur(cur + 1, consecutive_num + 1)     # 연속된 수를 골랐을 때
                else:
                    recur(cur + 1, 1)                       # 연속된 수를 고르지 않았을 때


recur(0, 0)
print(num_of_cases)

경우의 수가 5의 10승이기 때문이다.
적절히 커팅을 해주기 위해 다음과 같은 생각을 해봤다.
1. 맞은게 5개 되는 순간부턴 뒤를 체크할 필요가 없다
2. 앞으로 맞아야 할 수(5-이때까지 맞은 수) 보다 앞으로 체크할 수(10-이때까지 체크한 수)가 클 땐 뒤의 수를 체크 할 필요가 없다.

먼저
5개 맞았을 때
2개로 나누어 봤다.
1. 연속된 수가 두개가 나왔을 때
2. 그렇지 않았을 때 5개 맞을 때 찍은 수랑 지금 찍을 수가 같을 때
3. 그렇지 않았을 때 5개 맞을 때 찍은 수랑 지금 찍을 수가 다를 때
미리 for 문으로 해당 값을 파악하고 써먹을 거다

---------------------------------------------------------------------------------------------------------문제 복기 하면서 깨닮은 건데 안되는 것을 def 맨 위에서 쳐주었으면 코드 매우 간결했을 거다. 하.. 도면 보면서 하나하나 하는 느낌으로 후다닥 짠 코드.. 좀더 생각하면서 짜자.

0개의 댓글