본문 바로가기
알고리즘/완전탐색

[백준][Python] 2503번 숫자 야구

by 임짠짠 2022. 7. 7.
반응형
 

2503번: 숫자 야구

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

www.acmicpc.net

 

 

코드

import sys
from itertools import permutations
n = int(input())
n_list = []
for i in range(n):
	a = list(map(int,sys.stdin.readline().split()))
	n_list.append(a)

items = [1,2,3,4,5,6,7,8,9]
i_list = list(permutations(items,3))
cnt = 0
for a in i_list:
	flag = 0
	for i in range(n):
		s,b = 0,0
		num_str = list(map(int,str(n_list[i][0])))
		for j in range(3):
			if a[j] == num_str[j]:
				s += 1
			else:
				if a[j] in num_str:
					b += 1		
		if s != n_list[i][1] or b != n_list[i][2]:
			flag = 0
			break

		else:
			flag = 1
	if flag == 1:
		cnt += 1
print(cnt)

 

설명

permutations 함수를 이용해서 1부터 9까지의 숫자로 만들 수 있는 개수가 3인 모든 조합을 구해서 i_list에 넣었다. i_list에 있는 리스트를 for문을 통해 주어진 조건에 만족하는지 하나씩 다 확인했다.

숫자를 string형으로 바꿔서 한 자리씩 비교를 했다. 만약 같으면 strike 수를 증가시키고, 다르면 다른 위치에 이 숫자가 존재하는지 확인하고 존재하면 ball 수를 증가시켰다.

flag 변수를 이용해서 만약 주어진 조건과 strike와 ball 수가 다르면 flag를 0으로 바꿨고 같으면 1로 바꿨다. for문을 나왔을 때 flag 값이 계속 1이면 모든 조건을 만족한다는 뜻이므로 cnt 값을 1 증가시켜줬다.

반응형

댓글