* 자리마다 숫자를 정하는 완전탐색
<내 풀이법>
1. 전체 숫자를 다 돌면서 카운트를 기록
2. 기록한 카운트 중에 정답 카운트랑 맞는 숫자 딕셔너리에 기록
3. 딕셔너리 카운트가 n인 숫자만 고르기
<중간에 헤맨 이유>
1. 카운트 세는 조건문 설정을 잘못함.
- c1, c2를 바꿔서 카운트 함.
- k 일 때 if b_arr.index(k) == 1이라고 잘못 입력해서 잘못 카운트함
2. 마지막에 n_arr 가 4일때를 세라고 해서 틀림
# 입력
n = int(input())
def check(i, j, k, b_arr):
c1 = 0
c2 = 0
if i in b_arr:
if b_arr.index(i) == 0:
c1 += 1
else:
c2 += 1
if j in b_arr:
if b_arr.index(j) == 1:
c1 += 1
else:
c2 += 1
if k in b_arr:
if b_arr.index(k) == 2:
c1 += 1
else:
c2 += 1
return c1, c2
n_arr = {}
for _ in range(n):
b, a1, a2 = tuple(map(int, input().split()))
b_arr = list(map(int, list(str(b))))
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
if i != j and j != k and k != i:
c1, c2 = check(i, j, k, b_arr)
if c1 == a1 and c2 == a2:
num = ''.join(list(map(str, [i, j, k])))
if num in n_arr:
n_arr[num] += 1
else:
n_arr[num] = 1
cnt = 0
for key in n_arr:
if n_arr[key] == n:
cnt += 1
print(cnt)
<더 좋은 코드를 위해>
딕셔너리를 따로 만들 필요 없이 바로바로 체크하도록 하면 메모리랑 시간을 아낄 수 있다.
# 변수 선언 및 입력
n = int(input())
arr = [
tuple(map(int, input().split()))
for _ in range(n)
]
# 모든 숫자를 다 만들어 봅니다. (백의 자리수가 i, 십의 자리수가 j, 일의 자리수가 k)
cnt = 0
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
# 같은 수가 있는지 확인합니다.
if i == j or j == k or k == i:
continue
# 해당 숫자가 정답일때, 모든 입력에 대해 올바른 답이 나왔는지 확인합니다.
successed = True
for a, num_cnt1, num_cnt2 in arr: # n개의 입력된 숫자에 대해서
# x : a[q]의 백의 자릿수, y : 십의 자릿수, z : 일의 자릿수
x = a // 100
y = a // 10 % 10
z = a % 10
# cnt1 : 1번 카운트, cnt2 : 2번 카운트
cnt1 = 0
cnt2 = 0
if x == i:
cnt1 += 1
if y == j:
cnt1 += 1
if z == k:
cnt1 += 1
if x == j or x == k:
cnt2 += 1
if y == i or y == k:
cnt2 += 1
if z == i or z == j:
cnt2 += 1
# 만약 카운트 수가 다르다면 해당 숫자는 정답이 될 수 없습니다.
if cnt1 != num_cnt1 or cnt2 != num_cnt2:
successed = False
break # 정답이 될 수 없으니 그냥 break
if successed: # n개가 다 통과라면 cnt += 1
cnt += 1
print(cnt)
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘] 백트래킹 - 경우의 수 문제 (0) | 2024.02.14 |
---|---|
[알고리즘] 백트래킹이란? (1) | 2024.02.14 |
[알고리즘] 코딩테스트란? (0) | 2024.01.21 |
[알고리즘] 알고리즘이란? (0) | 2023.11.15 |
[코드트리 novice mid] 완전탐색 - 두가지로 열리는 자물쇠 (0) | 2023.11.09 |