https://www.acmicpc.net/problem/2503
2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
이걸 어떻게 구현해야 할까?
질문마다 해당할 수 있는 모든 케이스들을 찾고 그것들에서 공통인 것들을 뽑아야 하나?
핵심은 제시된 세자리 숫자와 모든 질문의 세 자리 숫자들을 비교하여 나온
스트라이크/볼의 횟수와 영수의 대답으로 답을 찾는 것이었습니다.
1. 영수가 생각하고 있는 숫자는 3자리 숫자이며 1~9까지의 서로 다른 수 입니다.(0이 없어요.)
이 숫자들의 리스트는 itertools의 permutations를 이용해도 되고
세자리 숫자 range에서 위 조건에 해당하지 않는 것들은 pass하면서 해도 됩니다.
2. 영수가 생각하고 있을 가능성이 있는 답의 갯수를 찾아야 하기 때문에 위에 해당하는 숫자들을 하나하나 질문들과
비교합니다. 질문들과 비교해서 모든 질문들을 통과하면 가능성이 있는 답이 되는 겁니다.
(예제어서 질문이 4개 이기 때문에 4개의 질문을 모두 만족하는 경우)
3. 질문을 통과한다는 이야기는 위 1의 숫자와 질문의 숫자를 비교해서 스트라이크의 갯수와 볼의 갯수가
영수가 답한 스트라이크/볼의 갯수와 같으면 됩니다.
==> 같은 자리에 같은 숫자가 있다면 스트라이크, 다른자리에 동일한 숫자가 있다면 볼.
M,R,I=lambda:input().split(),range,int
N,*t=M()
q=[[*M()]for _ in R(I(N))]
a=0
for e in R(123,999):
e=str(e);c=0
if len(set(e))<3 or '0' in e:continue
for n,s,b in q:
S=B=0
for i in R(3):
if n[i]==e[i]:S+=1
elif n[i] in e:B+=1
if S==I(s) and B==I(b):c+=1
a+=c==I(N)
print(a)
'BaekJoon' 카테고리의 다른 글
백준 14003 가장 긴 증가하는 부분 수열 5 (0) | 2024.04.21 |
---|---|
백준 12933 오리 (0) | 2024.04.17 |
백준 13016 내 왼손에는 흑염룡이 잠들어 있다 (0) | 2022.03.29 |
백준 11501 주식 (0) | 2022.03.26 |
백준 11670 초등 수학 (0) | 2022.03.24 |