[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
반응형