2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
코드
from itertools import permutations
n = int(input())
set_num = set([tuple(map(str, comb))
for comb in permutations(range(1, 10), 3)]) # 가능한 숫자 집합
for _ in range(n):
num, strike, ball = map(int, input().split())
new_set = set()
for arr in set_num:
s, b = 0, 0
for j in range(3): # 스트라이크 & 볼 개수 세기
result = str(num).find(arr[j])
if result == j:
s += 1
elif result != j and result >= 0:
b += 1
if strike == s and ball == b:
new_set.add(arr)
set_num = set_num & new_set
print(len(set_num))
- 가능한 숫자들의 집합인 set_num을 만든다.
문제의 조건에서 1에서 9까지 서로 다른 숫자 세 개로 구성된 수라고 하였으므로 permutations를 이용하여 서로 다른 세 수로 이루어진 숫자 순열을 구한다. - 민혁이의 질문을 하나씩 받으며 가능한 숫자들만 추린다. 아래의 과정을 반복하여 구할 수 있다.
- 질문으로 받은 수인 num에 가능성있는 수들을 모아놓은 set_num의 수들을 하나씩 대조해볼 것이다.
- 현재 살펴보고 있는 set_num의 수를 arr이라 할 때, arr과 num을 대조하여 스트라이크 s와 볼 b 개수가 답변으로 주어졌던 strike와 ball과 같다면 new_set에 arr을 추가한다.
- set_num과 new_set의 교집합을 구하여 그 집합을 set_num에 다시 저장한다.
'문제풀이 > 완전탐색' 카테고리의 다른 글
[Python/파이썬] 백준 14889번 스타트와 링크 (0) | 2024.05.30 |
---|---|
[Python/파이썬] 백준 28075번 스파이 (0) | 2024.03.15 |
[Python/파이썬] 백준 5883번 아이폰 9S (0) | 2024.02.06 |
[Python/파이썬] 백준 15970번 화살표 그리기 (1) | 2024.02.03 |
[Python/파이썬] 백준 1025번 제곱수 찾기 (0) | 2024.01.11 |
2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
코드
from itertools import permutations n = int(input()) set_num = set([tuple(map(str, comb)) for comb in permutations(range(1, 10), 3)]) # 가능한 숫자 집합 for _ in range(n): num, strike, ball = map(int, input().split()) new_set = set() for arr in set_num: s, b = 0, 0 for j in range(3): # 스트라이크 & 볼 개수 세기 result = str(num).find(arr[j]) if result == j: s += 1 elif result != j and result >= 0: b += 1 if strike == s and ball == b: new_set.add(arr) set_num = set_num & new_set print(len(set_num))
- 가능한 숫자들의 집합인 set_num을 만든다.
문제의 조건에서 1에서 9까지 서로 다른 숫자 세 개로 구성된 수라고 하였으므로 permutations를 이용하여 서로 다른 세 수로 이루어진 숫자 순열을 구한다. - 민혁이의 질문을 하나씩 받으며 가능한 숫자들만 추린다. 아래의 과정을 반복하여 구할 수 있다.
- 질문으로 받은 수인 num에 가능성있는 수들을 모아놓은 set_num의 수들을 하나씩 대조해볼 것이다.
- 현재 살펴보고 있는 set_num의 수를 arr이라 할 때, arr과 num을 대조하여 스트라이크 s와 볼 b 개수가 답변으로 주어졌던 strike와 ball과 같다면 new_set에 arr을 추가한다.
- set_num과 new_set의 교집합을 구하여 그 집합을 set_num에 다시 저장한다.
'문제풀이 > 완전탐색' 카테고리의 다른 글
[Python/파이썬] 백준 14889번 스타트와 링크 (0) | 2024.05.30 |
---|---|
[Python/파이썬] 백준 28075번 스파이 (0) | 2024.03.15 |
[Python/파이썬] 백준 5883번 아이폰 9S (0) | 2024.02.06 |
[Python/파이썬] 백준 15970번 화살표 그리기 (1) | 2024.02.03 |
[Python/파이썬] 백준 1025번 제곱수 찾기 (0) | 2024.01.11 |