(DFS) 백준 1107번 리모컨

DARTZ·2022년 4월 29일
0

알고리즘

목록 보기
26/135
import sys
input = sys.stdin.readline
target = int(input())
n = int(input())
broken = list(map(int, input().split()))

# 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우
min_count = abs(100 - target) # 절대 값을 사용한다. (채널은 양의 정수만 존재야 하므로)

for nums in range(1000001):
    nums = str(nums)
    
    for j in range(len(nums)):
        # 각 숫자가 고장났는지 확인 후, 고장 났으면 break
        # 모든 채널을 검사한다. 예를들어 7564번 채널이라고 하면 7,5,6,4를 검사해서 
        # 망가진 리모컨 번호가 있을 경우 바로 break
        if int(nums[j]) in broken:
            break

        # 고장난 숫자 없이 마지막 자리까지 왔다면 min_count 비교 후 업데이트
        elif j == len(nums) - 1: # 마지막 까지 왔을 경우
        	# 맨 처음 100에서 +, -을 눌러서 이동하는 것보다는 번호키가 가능한 어느 채널로
            # 이동한 다음에 거기서 +, -로 이동해서 가는 것이 빠를 수도 있으므로 그 경우를
            # 계산하는 식. 몇 번 채널로 이동하든 목표는 같기 때문에 매번 검사를 해줘서
            # 최솟값을 구한다.
            min_count = min(min_count, abs(int(nums) - target) + len(nums))

print(min_count)

다른 사람의 코드를 참고했다. BF (Brute Force) 알고리즘을 사용했다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글