문제
정보문화진흥원 정보 영재 동아리에서 동아리 활동을 하던 영수와 민혁이는 쉬는 시간을 틈타 숫자야구 게임을 하기로 했다.
- 영수는 1에서 9까지의 서로 다른 숫자 세 개로 구성된 세 자리 수를 마음속으로 생각한다. (예: 324)
- 민혁이는 1에서 9까지의 서로 다른 숫자 세 개로 구성된 세 자리 수를 영수에게 묻는다. (예: 123)
- 민혁이가 말한 세 자리 수에 있는 숫자들 중 하나가 영수의 세 자리 수의 동일한 자리에 위치하면 스트라이크 한 번으로 센다. 숫자가 영수의 세 자리 수에 있긴 하나 다른 자리에 위치하면 볼 한 번으로 센다.
예) 영수가 324를 갖고 있으면
- 429는 1 스트라이크 1 볼이다.
- 241은 0 스트라이크 2 볼이다.
- 924는 2 스트라이크 0 볼이다.
- 영수는 민혁이가 말한 수가 몇 스트라이크 몇 볼인지를 답해준다.
- 민혁이가 영수의 세 자리 수를 정확하게 맞추어 3 스트라이크가 되면 게임이 끝난다. 아니라면 민혁이는 새로운 수를 생각해 다시 영수에게 묻는다.
현재 민혁이와 영수는 게임을 하고 있는 도중에 있다. 민혁이가 영수에게 어떤 수들을 물어보았는지, 그리고 각각의 물음에 영수가 어떤 대답을 했는지가 입력으로 주어진다. 이 입력을 바탕으로 여러분은 영수가 생각하고 있을 가능성이 있는 수가 총 몇 개인지를 알아맞혀야 한다.
아래와 같은 경우를 생각해보자.
- 민혁: 123
- 영수: 1 스트라이크 1 볼.
- 민혁: 356
- 영수: 1 스트라이크 0 볼.
- 민혁: 327
- 영수: 2 스트라이크 0 볼.
- 민혁: 489
- 영수: 0 스트라이크 1 볼.
이때 가능한 답은 324와 328, 이렇게 두 가지이다.
영수는 동아리의 규율을 잘 따르는 착한 아이라 민혁이의 물음에 곧이곧대로 정직하게 답한다. 그러므로 영수의 답들에는 모순이 없다.
민혁이의 물음들과 각각의 물음에 대한 영수의 답이 입력으로 주어질 때 영수가 생각하고 있을 가능성이 있는 답의 총 개수를 출력하는 프로그램을 작성하시오.
문제풀이
from itertools import permutations
n=int(input())
#01
List = list(permutations(['1','2','3','4','5','6','7','8','9'],3))
for _ in range(n):
a,b,c=map(int,input().split())
#02
a=list(str(a))
cnt=0
for i in range(len(List)):
strike=ball=0
i-=cnt
for j in range(3):
#03
if List[i][j]==a[j]:
strike+=1
elif a[j] in List[i]:
ball+=1
#04
if strike!=b or ball!=c:
List.remove(List[i])
cnt+=1
print(len(List))
- #01 : permutations을 이용하여 1~9까지 중에 3가지를 뽑아 만들 수 있는 값을 구한다.
- #02 : 입력을 int로 받았기에, a의 값을 str 형태로 변환해준다.
참고로 cnt는 아래 for문에서의 범위를 벗어나지 않게 조절하는 역할을 한다.
- #03 : i와 j로 List와 a의 값을 비교하며, 자리위치까지 같다면 strike를 1올리고,
자리위치는 다르지만, 값이 List에 포함되어있다면 ball을 1올린다.
- #04 : 만약 다른 값인 경우 List에서 삭제한 후 cnt 값을 1 증가시킨다.
참고로 cnt 값은 for문 초반에서 i 값을 감소시켜 List가 인덱스 범위를
넘어가지 않게 막아주는 역할을 한다.
최종적으로 남은 List의 길이를 출력해준다.
'프로그래밍 > 백준' 카테고리의 다른 글
[알고리즘] 백준 16488 파이썬 - 피카츄가 낸 어려운 문제 (2) | 2023.03.05 |
---|---|
[알고리즘] 백준 18221 파이썬 - 교수님 저는 취업할래요 (1) | 2023.03.04 |
[알고리즘] 백준 1254 파이썬 - 팰린드롬 만들기 (3) | 2023.03.01 |
[알고리즘] 백준 2252 파이썬 - 줄 세우기 (위상정렬) (2) | 2023.02.28 |
[알고리즘] 백준 14426 파이썬 - 접두사 찾기 (1) | 2023.02.27 |