[python_파이썬_Pass]백준_2503번_숫자 야구_풀이
2024. 8. 15. 23:04ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/CkXfGvDJ2i8?feature=shared
1. 스터디원 : 2명
2. 21시~21시50분 50분간 2명 모두 해결 못함
3. 나는 문제 자체를 이해 못했으나 스터디원의 문제 리뷰 후 이해함
4. 즉, 3자리 모든 숫자(0제외, 반복 제외)를 각 예시의 경우와 비교해서 동일한 스트라이크와 볼이 나오는 케이스만 살리면 됨
#여기서 중요한 점
remove를 사용해서 nums안의 num을 제거할 떄 nums를 반복하고 있는 상황에서 바로 지워주면 특정요소들이 제대로 처리가 안되는 문제 발생
그래서 별도 제거할 리스트를 만들어 준 후 한번에 제거함
#permutations를 활용해도 괜찮을 것 같음
<내가 푼 코드>
import sys
input = sys.stdin.readline
Q = int(input())
"""3자리 숫자 리스트, 0제외, 중복 제외, permutations미사용"""
nums = []
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
if i == 0 or j == 0 or k == 0:
continue
elif i == j or i == k or j == k:
continue
else:
nums.append(str(i) + str(j) + str(k))
#print(nums)
for _ in range(Q):
call, s, b = map(int, input().split())
"""동일조건 숫자 확인"""
temp = []
for num in nums:
strike = ball = 0
#print(num)
for j in range(len(num)):
if num[j] == str(call)[j]:
strike += 1
elif num[j] in str(call):
ball += 1
# print(num, strike, ball)
if s != strike or b != ball:
#nums.remove(num) 이렇게 하면 비정상동작
temp.append(num)
"""nums안에 temp숫자들 제거, 이렇게 해야 오류 제거됨 """
for num in temp:
nums.remove(num)
print(len(nums))
#우씨 어렵네.;;;; 아예 감이 안잡히네 ;;;;
"""
일단, 3자리 경우의 수를 뽑아놓고, 조건에 맞지 않으면 제외 방법
permutations사용 후 3자리 숫자 뽑는다. => 순열 사용말고 그냥 숫자 뽑아낼 수도
출력 : 영수가 생각하고 있을 가능성이 있는 답의 총 개수 출력
영수 : 324 => 4번 질문 후 324, 328가능성 2개
num숫자 베이스로 하나씩 다 확인해서
ex> 123이 1 스트라이크, 1 볼일때
124는? 2S
125는? 2S
324는 1S, 1B
328도 1S, 1B
329도 같음
327도 같음
즉, 123일때 모든 숫자를 확인해서 동일하게 1S, 1B인 남은 숫자들이 있을거고
356일때 1스트라이크
3XX
X5X
XX6 숫자가 나올 때 1S로 숫자 리스트가 있을거고,
각 조건들이 돌아갈때 남은 숫자들이 같은 경우?
"""
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬_Half Pass]백준_15649번_N과 M(1)_백트래킹_풀이 (0) | 2024.08.19 |
---|---|
[python_파이썬_Pass]백준_10250번_ACM 호텔_풀이 (0) | 2024.08.19 |
[python_파이썬_Pass]백준_2564번_경비원_풀이 (0) | 2024.08.12 |
★[python_파이썬_Fail]백준_2573번_빙산_풀이 (0) | 2024.08.06 |
[python_파이썬_포기]프로그래머스_LV1_2016년_풀이 (0) | 2024.06.23 |