반응형
2503
https://www.acmicpc.net/problem/2503
2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
[정답]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import sys
ans = [True]*1000
N = int(sys.stdin.readline())
cnt = 0
for n in range(N):
num, s, b = map(int, sys.stdin.readline().split())
num = str(num)
for i in range(123, 988):
i = str(i)
if i[0] == i[1] or i[0] == i[2] or i[1] == i[2]:
ans[int(i)] = False
if i[0] == '0' or i[1] == '0' or i[2] == '0':
ans[int(i)] = False
s_cnt = 0
b_cnt = 0
for j in range(3):
for k in range(3):
if i[j] == num[k]:
if j == k:
s_cnt += 1
else:
b_cnt += 1
if ans[int(i)] and s_cnt == s and b_cnt == b:
ans[int(i)] = True
else:
ans[int(i)] = False
for i in range(123, 988):
if ans[i]:
cnt += 1
print(cnt)
|
cs |
.
.
.
[풀이]
숫자 야구에선 1~9의 수를 중복하지 않고 세자리로 사용한다.
따라서 123~987에서 수의 중복, 0이 없도록 처리한다.
itertools의 permutations을 사용하여 조합된 리스트를 바로 만들 수 있지만,
기본에 충실하기 위해 직접 리스트를 짰다.
그 후 brute force로 for문을 이용하여 num과
숫자가 같고 인덱스도 같으면 strike 카운트,
숫자만 같으면 ball 카운트를 더해주어
입력한 s, b와 비교해준다.
값이 True인 애들의 수를 계산하여 출력한다.
p.s.
좀 지능적으로 계산하는 방법이 없을까 고민했지만
결국 일일이 계산하는 브루트포스로 해결했다.
좀 아쉽다.
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준 2960] 파이썬 : 에라토스테네스의 체 (0) | 2021.10.03 |
---|---|
[백준 8974] 파이썬 : 희주의 수학시험 (0) | 2021.10.02 |
[백준 11004] 파이썬 : K번째 수 (0) | 2021.10.02 |
[백준 9613] 파이썬 : GCD 합 (0) | 2021.09.30 |
[백준 11091] 파이썬 : 알파벳 전부 쓰기 (0) | 2021.09.29 |