프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 2503 숫자 야구 Python

중규리 2024. 2. 9. 12:54

🐸 문제 정보

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

www.acmicpc.net

 

🤖 알고리즘

구현

 

⏱️ 풀이 시간

15.14m

 

📝 풀이

처음에 숫자 야구 규칙을 직접 코드로 구현해야하나..? 하고 헉 했는데, 알고보니 그냥 순열에서 조건 맞지 않는 요소를 제거하는 문제였다.

파이썬이니까 permutation 쓰고, set으로 시간복잡도를 조금이라도 줄이고자 했다.

 

🧑‍💻 나의 답

# pypy3

import sys
from itertools import permutations
input = sys.stdin.readline

n = int(input().rstrip())
candi = set(permutations([1,2,3,4,5,6,7,8,9], 3))

for _ in range(n):
    cur, s, b = list(map(int, input().rstrip().split()))
    cur = tuple(map(int, list(str(cur))))
    temp = set()
    for num in candi:
        ts, tb = 0, 0
        for i in range(3):
            if num[i] == cur[i]: ts += 1
            elif num[i] in cur: tb += 1
        if (ts == s) and (tb == b):
            temp.add(num)
    candi = temp

print(len(candi))