코딩테스트 (Coding Test)

[백준] 2503번 숫자야구 - 파이썬

zzoming 2023. 10. 3. 03:22

#2503번

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

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

www.acmicpc.net

1. 3자리로 구성된 숫자 (100~999) 

2. 3자리로 구성된 숫자와 제시된 숫자를 비교해 스트라이크 개수, 볼의 개수가 같으면 답 +1

 

첫번째 방법 ⇒ 완전탐색

n = int(input())

numbers = [list(map(int,input().split())) for _ in range(n)]

answer = 0

for a in range(1,10): # 100의 자리수
    for b in range(1,10): # 10의 자리수
        for c in range(1,10): # 1의 자리수
            count = 0
            
            if( a == b or b == c or c == a): #세 자리수가 다 다르기 때문에
                continue
        
            for array in numbers:
                hint = list(str(array[0])) # ['1','2','3']
                strike = int(array[1])
                ball = int(array[2])

                strike_count = 0
                ball_count = 0

                #스트라이크 계산기
                if (a == int(hint[0])):
                    strike_count += 1
                if (b == int(hint[1])):
                    strike_count += 1
                if (c == int(hint[2])):
                    strike_count += 1
                

                #볼 계산기
                if (a == int(hint[1]) or a == int(hint[2])):
                    ball_count += 1
                if (b == int(hint[0]) or b == int(hint[2])):
                    ball_count += 1
                if (c == int(hint[0]) or c == int(hint[1])):
                    ball_count += 1
                
                
                #(4) 매칭 여부 확인하기
                if (strike == strike_count) and (ball == ball_count):
                    count+= 1 
                else :
                    break


            if count == n:
                answer += 1
                
print(answer)

두번째 방법 ⇒ 재귀