728x90
반응형
문제:
숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다.
각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.
* 숫자가 맞지만, 위치가 틀렸을 때는 볼
* 숫자와 위치가 모두 맞을 때는 스트라이크
* 숫자와 위치가 모두 틀렸을 때는 아웃
질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.
풀이 방법:
완전 탐색 문제이므로 모든 경우의 수를 따져주면 된다. 우선 123~987까지 모든 경우를 만들어준다(중복은 허용하지 않는다)
이 후 123에 대해 1S, 1B인 경우들만 살려두고 나머지는 0으로 만들어 제거해버린다. 예를 들면 125이면 2S이므로 0으로 바뀌고 142와 같은 경우가 1S 1B이므로 살려둔다. 이와 같은 방법으로 baseball에 있는 모든 경우를 진행한 뒤 남은 경우의 길이를 반환하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | def solution(baseball): answer=[] for i in range(1,10): for j in range(1,10): for k in range(1,10): if (i==k or i==j or j==k): pass else: answer.append(str(i*100+j*10+k)) for i in baseball: for j in range(len(answer)): st_cnt=0 bl_cnt=0 for k in range(3): for l in range(3): if (answer[j][k]==str(i[0])[l] and k==l): st_cnt+=1 elif (answer[j][k]==str(i[0])[l] and k!=l): bl_cnt+=1 if st_cnt==int(i[1]) and bl_cnt==int(i[2]): pass else: answer[j]=0 answer=list(set(answer)) if (0 in answer): answer.remove(0) else: pass return len(answer) | cs |
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[Programmers]Lv 2. 구명 보트 (0) | 2019.02.24 |
---|---|
[Programmers]Lv 3.타일 장식물 (0) | 2019.02.23 |
[Programmers]Lv 3. 2 X N 타일링 (0) | 2019.02.21 |
[Programmers]Lv 2. 위장 (0) | 2019.02.20 |
[Programmers]Lv 1.N으로 표현 (0) | 2019.02.19 |