병아리의 코딩 일기

[BOJ 2503] 숫자 야구 Python 본문

코딩테스트 Coding Test/백준

[BOJ 2503] 숫자 야구 Python

oilater 2024. 3. 27. 22:06

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

 

2503번: 숫자 야구

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

www.acmicpc.net

 

요즘 파이썬으로 Brute Force 문제들을 연습하고 있다.

이전 방식과 다르다보니 완탐식 생각이 의외로 익숙하지가 않다 

 

문제 풀이 전략

 

1.

일단 입력은 배열로 받아놔야 한다.

니중에 이용해먹을라면 ,,

 

2. 

영수가 생각하고 있을 가능성이 있는 숫자를 모두 물었다.

그걸 알 방법이 없기 때문에

111 ~ 999 까지 다 돌려보아야 한다.

 

숫자가 중복되면 안되기 때문에

123, 124, 312 이런 식이어야 하고, 순열로 구하는게 더 낫겠지만

일단은 반복문 돌린 후 조건으로 걸러주었다.

 

3.

현재 볼 카운트, 현재 스트라이크 카운트를 생성해놓고,

민혁이가 부른 수와 영수가 생각한 수의 각 자리를 비교해보자.

파이썬 문법을 아직 잘 몰라서 이런 식으로 비교했다;

 

 

마지막 cnt == N이 아닌, cnt == 4로 해놓는 바람에 두번 틀렸었다 ㅠㅋㅋ

직관적으로 푸는 것과, 완탐적 사고방식을 더 연습해야겠다..!

 

 

 

 

ans = 0
N = int(input())
hints = [list(map(int, input().split())) for _ in range(N)]

for first in range(1, 10):
    for second in range(1, 10):
        for third in range(1, 10):
            if first == second or second == third or first == third:
                continue
            
            cnt = 0
            for arr in hints:
                number = str(arr[0])
                strike = arr[1]
                ball = arr[2]
                
                cur_strike = 0
                cur_ball = 0
                # 스트라이크인지 볼인지 확인한 후 strike와 ball 수와 비교하기
                if number[0] == str(first):
                    cur_strike += 1
                elif number[0] == str(second):
                    cur_ball += 1
                elif number[0] == str(third):
                    cur_ball += 1
                
                if number[1] == str(second):
                    cur_strike += 1
                elif number[1] == str(first):
                    cur_ball += 1
                elif number[1] == str(third):
                    cur_ball += 1
                
                if number[2] == str(third):
                    cur_strike += 1
                elif number[2] == str(first):
                    cur_ball += 1
                elif number[2] == str(second):
                    cur_ball += 1
                
                if cur_strike == strike and cur_ball == ball:
                    cnt += 1


            if cnt == N:
                ans += 1

print(ans)
728x90
반응형
LIST