Kim Seon Deok

[백준] 2503 숫자 야구 본문

python/Algorithm

[백준] 2503 숫자 야구

seondeok 2022. 1. 28. 00:54

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

 

2503번: 숫자 야구

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

www.acmicpc.net

1.순열을 통해 문제를 풀기 위해 itertools 모듈의 permutations함수를 import

2.n과 hint를 통해 입력을 받음

3.1~9까지 문자열의 형태로 number리스트 생성

4.permutations함수를 통해 number리스트에서 만들어질 수 있는 모든 경우의 수를 example_리스트에 저장

5.입력받은hint 리스트중 0번째 인덱스만 뽑아내어 문자열로 변경 후 만들어진 새로운 인덱스 answer

6.길이가 3인 리스트 두 개를 인자로 받아, strike와 ball의 점수를 계산하는 score함수

7. 모든 경우의 수가 담긴 example_리스트와 입력받은 hint함수dml 0번째 인덱스를 문자열로 쪼개어 저장한 answer리스트를 인자로 하여 score함수에 넣으면 example_리스트의 i번째 인덱스마다 결과가 n개씩 출력된다.

n개를 각각res리스트에 저장하고 최종적으로 c리스트에 저장한다.

8.c리스트와 맨 처음 입력할 때 만들었던 hint리스트가 같을 때 그때의 c리스트의 인덱스 갯수를 찾는다.

from itertools import permutations  # 순열
n = int(input())  # 추측하는 횟수
hint = [list(map(int,input().split())) for _ in range(n)]  # 힌트 입력받기
# print(hint)
number = ['1','2','3','4','5','6','7','8','9']


example = list(permutations(number,3))  # 모든 경우의 수
example_ = []  # [['1','2','3'], ...] 형태
for i in range(len(example)):
    example_.append(list(example[i]))


def make_list(l,n):
    for i in range(len(hint)):
        l.append(hint[i][n])
    return l 


ans = []  # 대답한 숫자들 [123,356,327,489]
make_list(ans,0)


answer = []  # 대답한 숫자들을 각 자릿수만큼 문자열로 분할 
                # [['1', '2', '3'], ['3', '5', '6'], ['3', '2', '7'], ['4', '8', '9']]
for i in range(len(ans)):
    a=list(str(ans[i]))
    answer.append(a)


def score(list1,list2):
    strike = 0
    ball = 0
    for i in range(0,3):
        for j in range(0,3):
            if list1[i] == list2[j] and i == j:
                strike += 1
                ball+=0
            elif list1[i] == list2[j] and i != j:
                strike+=0
                ball += 1
            else:
                strike+= 0
                ball +=0
    
    result = []
   
    
    A = int(str(list2[0]) + str(list2[1]) + str(list2[2]))
    result.append(A)
    result.append(strike)
    result.append(ball)
    
    return result

c = []  
i = 0
while i < len(example_):  
    res = []
    for j in range(len(answer)):
        res.append(score(example_[i],answer[j]))
    c.append(res)
    i +=1

p = []
for k in range(len(c)):
    if c[k] == hint:
        p.append(c[k])

print(len(p))

 

 

 

 

 

 

'python > Algorithm' 카테고리의 다른 글

[백준] 5397 키로거  (0) 2022.01.31
[백준] 1759 암호만들기  (0) 2022.01.29
[백준] 14889 스타트와 링크  (0) 2022.01.26
[백준] 20436 ZOAC 3  (0) 2022.01.22
[백준 14670] 병약한 영정  (0) 2022.01.19
Comments