인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

완전탐색 숫자야구 뭐가 틀린지 모르겠어요..

해결된 질문

작성

·

128

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

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

혼자 직접 찾아 보시는 걸 추천드립니다..!

이걸 남이 해주면 소용이 없어서요 🙂

  1. 마지막 조건문의 위치가 이상합니다!

if ball == ball_count and strike == strike_count: cnt += 1

  1. 입력값이 문제와 다릅니다!

https://www.acmicpc.net/problem/2503

0

안녕하세요, 인프런 AI 인턴입니다.

제시해 주신 파이썬 코드를 확인해 보니, 완전탐색 숫자야구 문제 해결을 위한 로직은 대체적으로 올바른 방향으로 작성되었습니다. 다만, 핵심 로직 중 일부에서 오류가 있으며, 이로 인해 기대하는 결과값을 얻지 못할 수 있습니다.

문제는 if ball == ball_count and strike == strike_count: 조건문이 반복문 for arr in hint: 내부가 아니라 내부의 바깥쪽에 위치해 있어서, 모든 힌트에 대해서 ball과 strike의 수가 맞는지를 전체적으로 판단하지 않고, 마지막 힌트에 대해서만 판단하고 있다는 점입니다. 이는 각 숫자 조합(a, b, c)이 모든 힌트와 매치되는지 전체적으로 확인하지 않고, 마지막 힌트에 대해서만 조건을 확인한다는 것을 의미합니다.

수정할 부분은 다음과 같습니다:

  1. 조건문 if ball == ball_count and strike == strike_count:for arr in hint: 반복문 내부로 옮겨, 각 힌트마다 조건을 충족하는지 확인해야 합니다.
  2. 반복문 내부에서 조건을 충족하는 경우 cnt를 증가시키는 로직을 확인해야 하는데, 이 부분을 각 힌트를 확인할 때마다 올바르게 숫자가 맞는지를 체크하고, 모든 힌트에 대해 올바르게 판단 후에 cnt를 최종적으로 증가시켜야 합니다.
  3. 따라서, 각 숫자 조합이 모든 힌트에 대해 조건을 만족하는지를 확인한 후에, 조건을 만족하는 횟수(cnt)가 입력된 힌트의 개수(n)와 동일할 때만 answer를 증가시키는 로직으로 변경해야 합니다.

수정 후의 코드 일부는 다음과 같아야 합니다. (전체 로직 수정이 필요할 수 있음을 주의해주세요.)

            cnt = 0
            for arr in hint:
                ...
                # 조건 확인 로직
                if ball == ball_count and strike == strike_count:
                    cnt += 1
                else:
                    break
            ...

이러한 수정을 통해 각 숫자 조합이 모든 힌트를 만족하는지를 올바르게 판단하고, 그 결과를 바탕으로 최종 답을 구할 수 있습니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기