2503 숫자 야구 문제
이번엔 파이썬 sys 라이브러리에 있는 permuatations 함수를 사용해보았다. 이 함수는 itreable한 원소로 순열과 조합을 구할 수 있도록 도와주는 함수다. 반복문을 돌리지 않고도 만들 수 있는 경우의 수를 찾아낼 수 있다.
itertools.permutation
완성 코드 :
import sys
from itertools import permutations
n = int(input())
num = list(permutations([1,2,3,4,5,6,7,8,9], 3)) #리스트에 숫자를 미리 넣기
for _ in range(n):
test, s, b = map(int, input().split())
test = list(str(test))
remove_cnt = 0
for i in range(len(num)):
s_cnt = b_cnt = 0
i -= remove_cnt
for j in range(3):
test[j] = int(test[j])
if test[j] in num[i]:
if j == num[i].index(test[j]):
s_cnt += 1
else:
b_cnt += 1
if s_cnt != s or b_cnt != b:
num.remove(num[i])
remove_cnt += 1
print(len(num))
느낀 점 : 각 위치와 맞는 숫자(스트라이크) 혹은 위치는 맞지 않지만 같은 숫자가 있을 때(볼)의 케이스를 생각하다보니 숫자카드 경우의 수 수학 문제가 생각이 났다. "파이썬" 키워드와 함께 찾아보았더니 permuatations 함수를 찾아볼 수 있었다. 직접 응용하는게 쉽지는 않았지만, 이용해보니 훨씬 문제 풀이가 간편해져서 좋았다.