작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
139
1
n = int(input())
hint = [list(map(int,input().split())) for _ in range(n)]
answer = 0
#100 ~ 999
for a in range(1,10): # 100의 자리
for b in range(10): # 10의 자리
for c in range(10): # 1의 자리
if (a == b or b == c or c == a):
continue
cnt = 0
for arr in hint:
number = list(map(int, str(arr[0])))
strike = arr[1]
ball = arr[2]
ball_count = 0
strike_count = 0
#스트라이크카운트 자리수,숫자 둘다
if number[0] == a:
strike_count += 1
if number[1] == b:
strike_count += 1
if number[2] == c:
strike_count += 1
#볼카운트 자리수는 안맞고 숫자만
if a in number and number[0] != a:
ball_count += 1
if b in number and number[1] != b:
ball_count += 1
if c in number and number[2] != c:
ball_count += 1
if ball == ball_count and strike == strike_count:
cnt += 1
if cnt == n:
answer += 1
print(answer)
답변 2
0
혼자 직접 찾아 보시는 걸 추천드립니다..!
이걸 남이 해주면 소용이 없어서요 🙂
마지막 조건문의 위치가 이상합니다!
if ball == ball_count and strike == strike_count: cnt += 1
입력값이 문제와 다릅니다!
0
안녕하세요, 인프런 AI 인턴입니다.
제시해 주신 파이썬 코드를 확인해 보니, 완전탐색 숫자야구 문제 해결을 위한 로직은 대체적으로 올바른 방향으로 작성되었습니다. 다만, 핵심 로직 중 일부에서 오류가 있으며, 이로 인해 기대하는 결과값을 얻지 못할 수 있습니다.
문제는 if ball == ball_count and strike == strike_count:
조건문이 반복문 for arr in hint:
내부가 아니라 내부의 바깥쪽에 위치해 있어서, 모든 힌트에 대해서 ball과 strike의 수가 맞는지를 전체적으로 판단하지 않고, 마지막 힌트에 대해서만 판단하고 있다는 점입니다. 이는 각 숫자 조합(a, b, c)이 모든 힌트와 매치되는지 전체적으로 확인하지 않고, 마지막 힌트에 대해서만 조건을 확인한다는 것을 의미합니다.
수정할 부분은 다음과 같습니다:
if ball == ball_count and strike == strike_count:
을 for arr in hint:
반복문 내부로 옮겨, 각 힌트마다 조건을 충족하는지 확인해야 합니다.cnt
를 증가시키는 로직을 확인해야 하는데, 이 부분을 각 힌트를 확인할 때마다 올바르게 숫자가 맞는지를 체크하고, 모든 힌트에 대해 올바르게 판단 후에 cnt
를 최종적으로 증가시켜야 합니다.cnt
)가 입력된 힌트의 개수(n
)와 동일할 때만 answer
를 증가시키는 로직으로 변경해야 합니다.수정 후의 코드 일부는 다음과 같아야 합니다. (전체 로직 수정이 필요할 수 있음을 주의해주세요.)
cnt = 0
for arr in hint:
...
# 조건 확인 로직
if ball == ball_count and strike == strike_count:
cnt += 1
else:
break
...
이러한 수정을 통해 각 숫자 조합이 모든 힌트를 만족하는지를 올바르게 판단하고, 그 결과를 바탕으로 최종 답을 구할 수 있습니다.