문제 설명
숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다. 게임해보기
각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.
* 숫자는 맞지만, 위치가 틀렸을 때는 볼
* 숫자와 위치가 모두 맞을 때는 스트라이크
* 숫자와 위치가 모두 틀렸을 때는 아웃
예를 들어, 아래의 경우가 있으면
A : 123
B : 1스트라이크 1볼.
A : 356
B : 1스트라이크 0볼.
A : 327
B : 2스트라이크 0볼.
A : 489
B : 0스트라이크 1볼.
이때 가능한 답은 324와 328 두 가지입니다.
질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 질문의 수는 1 이상 100 이하의 자연수입니다.
- baseball의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.
입출력 예
baseball | return |
---|---|
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] | 2 |
조건문걸고 브루트포스로 푸는문제.
가능한 경우를 모두 탐색하면된다.
1~9까지 숫자가 각기 다르게 3자리를 구성한다는 점을 유의하자.
def calculate_strike(a,b):
count = 0
for i,v in enumerate(a):
if( v == b[i] ):
count = count+1
return count
def calculate_ball(a,b):
count = 0
for i,v in enumerate(a):
if( v in b and v is not b[i]):
count = count+1
return count
def solution(baseball):
num_set = [ x for x in range(111,1000) if '0' not in str(x) and not((str(x)[0]==str(x)[1]) or (str(x)[1]==str(x)[2]) or (str(x)[0]==str(x)[2])) ]
for info in baseball:
num_set = [ x for x in num_set if (calculate_strike( str(x), str(info[0]) ) == info[1]) and (calculate_ball( str(x), str(info[0]) ) == info[2]) ]
#print(num_set)
return len(num_set)
'개발 > 알고리즘' 카테고리의 다른 글
[Programmers] 크레인 인형뽑기 (0) | 2020.08.29 |
---|---|
[Javascript] 최소공배수 문제 (0) | 2019.12.10 |
1032 명령 프롬포트 (0) | 2019.11.02 |
[Programmers] 완전탐색 모의고사 (0) | 2019.11.02 |
다익스트라 최소비용, 경로출력 (0) | 2019.05.16 |