Python 2503 : 숫자 야구

cad·2022년 2월 4일
0

Algorithm

목록 보기
26/33
post-thumbnail

문제

풀이

  • 완전 탐색 문제
  • 정답이 될 수 있는 123~987 의 경우의 수를 모두 검사하면서 답이 될 수 없는 경우를 줄여 나간다.
  • 답이 될 수 없는 경우는 어떻게 구하는가?
    1. 입력 받은 값(숫자,S,B)과 비교해서 Strike 와 Ball 의 값이 같다면 정답일 수도 있다.(영수가 생각하고 있을 가능성이 있는 답)
    • 다르다면 답이 될 수 없다.
  • 위의 경우 하나만 체크 해준다면 결과가 나온다.

잡담

  • 구현이 너무 약하다.
  • 어렴풋이 풀이는 생각나는데 구현하기가 쉽지 않다.

전체 코드

from itertools import permutations

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
num = list(permutations(data, 3))

n = int(input())
remove_count = 0

for _ in range(n):
    n, s, b = map(int, input().split())
    n = list(str(n))
    remove_count = 0

    for i in range(len(num)):
        s_cnt = 0
        b_cnt = 0
        # num[i] 부터 시작해야하므로 인덱스를 정정해준다.
        i -= remove_count
        for j in range(3):
            n[j] = int(n[j])
            if num[i][j] == n[j]:
                s_cnt += 1
            elif n[j] in num[i]:
                b_cnt += 1

        if s_cnt != s or b_cnt != b:
            num.remove(num[i])
            remove_count += 1

print(len(num))
profile
Dare mighty things!

0개의 댓글