문제
풀이
아이디어
- 입력받은 세 자리수를 각 자릿수로 나눠줘 숫자가 같고 위치도 같다면 strike, 숫자가 같고 위치는 다르다면 ball로 개수를 세준다.
- 입력받은 strike, ball 수와 n번 일치한다면 경우의 수를 세준다.
- 틀린 코드
import sys
input = sys.stdin.readline
N = int(input().rstrip())
answer = 0
hint = [list(map(int, input().split())) for _ in range(N)]
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
if a == b or b == c or c == a:
continue
cnt = 0
for arr in hint:
num, strike, ball = arr
num = list(str(num))
a = str(a)
b = str(b)
c = str(c)
ball_cnt = 0
strike_cnt = 0
if a == num[0]:
strike_cnt += 1
elif a in num:
ball_cnt += 1
if b == num[1]:
strike_cnt += 1
elif b in num:
ball_cnt += 1
if c == num[2]:
strike_cnt += 1
elif c in num:
ball_cnt += 1
if ball == ball_cnt and strike == strike_cnt:
cnt += 1
if cnt == N:
answer += 1
print(answer)
반례
2
123 0 3
123 0 3
정답 => 2
위 코드 => 4
정답 코드 strike, ball 수가 입력값과 같아질 때 a, b, c 값
2 3 1
2 3 1
3 1 2
3 1 2
틀린 코드 strike, ball 수가 입력값과 같아질 때 a, b, c 값
2 3 1
2 3 1
2 3 2
2 3 2
3 1 2
3 1 2
3 3 1
3 3 1
위 틀린 코드에서는 a, b, c를 숫자가 아니라 문자로 변환해 list 값 안에서 문자가 일치할 때를 세주니 a, b, c 중 같은 값이 들어가 틀렸다.
- 정답
import sys
input = sys.stdin.readline
N = int(input().rstrip())
answer = 0
hint = [list(map(int, input().split())) for _ in range(N)]
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
if a == b or b == c or c == a:
continue
cnt = 0
for arr in hint:
num, strike, ball = arr
num_test = list(str(num))
num1 = num // 100
num2 = num % 100 // 10
num3 = num % 10
ball_cnt = 0
strike_cnt = 0
if a == num1:
strike_cnt += 1
elif a == num2 or a == num3:
ball_cnt += 1
if b == num2:
strike_cnt += 1
elif b == num1 or b == num3:
ball_cnt += 1
if c == num3:
strike_cnt += 1
elif c == num1 or c == num2:
ball_cnt += 1
if ball == ball_cnt and strike == strike_cnt:
cnt += 1
if cnt == N:
answer += 1
print(answer)
각 자릿수를 정확히 나눠 비교해준다.
🙂 공부하면 정리하는 글입니다. 잘못된 점이 있다면 피드백 남겨주시면 감사합니다.
'Algorithms > 코테 문풀' 카테고리의 다른 글
[백준 11866번] 요세푸스 문제 0 (0) | 2023.10.10 |
---|---|
[백준 1920번] 수 찾기, 이진 탐색 알고리즘 (1) | 2023.10.09 |
[백준 19532번] 수학은 비대면강의입니다 (0) | 2023.09.14 |
[백준 14568번] 2017 연세대학교 프로그래밍 경시대회 (0) | 2023.09.14 |
[백준 2156번] 포도주 시식 (0) | 2023.08.29 |