Algoritm/BOJ

[BOJ] 1107번: 리모콘

twoDeveloper 2022. 4. 20. 15:26

■ 문제 해설

- 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우

- range(100001)로 잡은 이유는 +일 경우보다 -일 경우가 더 최적의 해를 가질 수 있기 때문

- 가장 가까운 버튼 + 길이 (가장 가까운 위치만큼 리모콘을 누르기 때문에 +len(channel))

- 브루트 포스

문제 해답

import sys
input = sys.stdin.readline

n = int(input())
m = int(input())
broken = list(map(int, input().split()))

min_count = abs(100 - n) # 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우

for channel in range(1000001):
  channel = str(channel)

  for j in range(len(channel)):
    if int(channel[j]) in broken: # 숫자가 고장났는지 확인
      break

    elif j == len(channel) - 1: 
      # 가장 가까운 버튼 중에서 channel - n 한 값 + 길이
      # 가장 가까운 위치만큼 리모콘을 누르기 때문에 len(channel)
      min_count = min(min_count, abs(int(channel) - n) + len(channel))

print(min_count)

문제 출처 : https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

 

'Algoritm > BOJ' 카테고리의 다른 글

[BOJ] 9093번: 단어 뒤집기  (0) 2022.09.06
[BOJ] 10828번: 스택  (0) 2022.09.06
[BOJ] 1476번: 날짜 계산  (0) 2022.04.20
[BOJ] 3085번: 사탕 게임  (0) 2022.04.20
[BOJ] 2309번: 일곱 난쟁이  (0) 2022.04.20