본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 2503번 숫자 야구

by 현장 2022. 5. 9.

-Code

from itertools import permutations
nums = list(permutations([str(i) for i in range(1, 10)], 3))
for _ in range(int(input())):
    baseball, st, ba = map(int, input().split())
    baseball = str(baseball)
    remove_cnt = 0
    for i in range(len(nums)):
        st_cnt, ba_cnt = 0, 0
        i -= remove_cnt
        for j in range(3):
            if baseball[j] in nums[i]:
                if baseball[j] == nums[i][j]:
                    st_cnt += 1
                else:
                    ba_cnt += 1
        if st != st_cnt or ba != ba_cnt:
            nums.remove(nums[i])
            remove_cnt += 1
print(len(nums))

처음에는 머리로는 아는데 구현을 못해서 고민을 오래 하다가 결국 풀이가 생각이 안 나서 원리만 찾아봤더니 그냥 모든 3개의 1~9까지 순열에서 스트라이크와 볼 수가 맞지 않는 것을 지우는 것이었습니다. 그래서 코드를 짰으나 중간중간에 건너뛰는 부분이 생겨서 도저히 풀리지 않아서 찾아보니 지운 개수만큼 i값에서 빼줘야 하는 것을 알게 되었고 해결을 했습니다. 많이 아쉬운 문제였습니다.