반응형
파이썬으로 프로그래머스 풀기 :: 숫자 야구
문제 설명
숫자 야구 게임이란 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 |
입출력 예 설명
문제에 나온 예와 같습니다.
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42841
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import itertools def baseball_fun(x, y): x = list(x);y = list(y) s = 0;b = 0 # 스트라이크, 볼 for i in range(3): if x[i] in y: if y.index(x[i]) == i: s += 1 else: b += 1 return [s, b] def solution(baseball): v = list(map(lambda x: str(x[0]), baseball)) # 질문하는 숫자 r = list(map(lambda x: [x[1], x[2]], baseball)) # 질문에 대한 답 all = list(itertools.permutations(range(1, 10), 3)) # 모든 가능한 수 all = list(map(lambda x: list(map(str, x)), all)) # change to str cnt = 0 # 가능한 수 for x in all: if [baseball_fun(x, y) for y in v] == r: cnt += 1 return cnt | cs |
1부터 9까지 중 3개의 숫자로 만들 수 있는 모든 조합에 대해 주어진 질문과 답변을 대조하는 방식. (완전 탐색)
반응형
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] H-Index in python (0) | 2019.12.14 |
---|---|
[프로그래머스] 베스트앨범 in python (0) | 2019.12.13 |
[프로그래머스] 다리를 지나는 트럭 in python (1) | 2019.12.11 |
[프로그래머스] 쇠막대기 in python (0) | 2019.12.10 |
[프로그래머스] 가장 큰 수 in python (2) | 2019.12.09 |