[python]백준 실버3 숫자야구

Yeolsim's logs·2024년 12월 3일

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

1. 문제이해

세자리의 1-9까지 서로 다른 숫자의 조합

영수는 3자리로 된 숫자를 정답으로 정한다

민혁이는 3자리 숫자를 임의로 제시해서 영수가 생각하고 있는 숫자를 맞추려고한다

동일한 자리에 위치하면 스트라이크 한 번으로 센다.

숫자가 있긴 하나 다른 자리에 위치하면 볼 한 번으로 센다.

제시한 숫자와 그 결과를 보고 정답으로 가능한 숫자의 갯수를 맞춰야함

2. 접근방법

  • 조건에 맞는 모든 조합의 세자리 숫자들을 각각 정답 가능성이 있는 수 인지 판별한다.
  • 판별시, 각 세자리 숫자는 주어진 모든 테스트 케이스와 비교해야 정답 가능성 여부를 판별할 수 있음

3.설계

  • 모든 3자리 숫자 조합에 대해 각 입력값 별로 strike와 ball의 갯수를 count
  • 직접 Count한 값과 주어진 테스트케이스별 strike와 ball의 갯수가 일치히면 정답일 가능성인 수로 판단
  • 각 숫자조합에 대해 주어진 테스트 케이스를 전부 통과하면 정답일 가능성이 있는 수

3. 코드

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

for i in range(1,10):
    for j in range(1,10):
        for k in range(1,10):
            if i==j or j==k or k==i:
                continue # "세자리의 1-9까지 서로 다른 숫자의 조합" 만족을 위해
            
            cnt=0    
            for tc in tc_list:
                num=str(tc[0])
                strike=tc[1]
                ball=tc[2]

                ball_cnt=0
                strike_cnt=0
                
                candidate=[i,j,k]
                tc_num=[int(num[0]),int(num[1]),int(num[2])]

                for x in range(3):
                    if candidate[x]==tc_num[x]:
                        strike_cnt+=1 #동일한 자리o, 동일한 값 -> strike
                    elif candidate[x] in tc_num:
                        ball_cnt+=1 # 동일한 자리x, 다른 자리에 같은 숫자 위치 ->ball
                
                if ball_cnt==ball and strike_cnt==strike:
                    cnt+=1

            if cnt==N:# 모든 tc를 만족하면 정답일 가능성인 수로 count
                result+=1                

print(result)
            

0개의 댓글