CodingTest/Baekjoon

[baekjoon] 백준 1107번(파이썬): 리모컨

JunJangE 2022. 5. 25. 01:54

문제

 

1107번: 리모컨

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

www.acmicpc.net

알고리즘

- 반복문을 통해 이동해야 하는 채널로 가기 위한 방법을 확인한다.

- 반복문을 통해 채널로 이동하기 위해 눌러야 하는 번호가 고장이 났는지 확인하고 고장이 났다면 그 번호를 눌러서는 이동할 수 없다.

- 채널로 이동 가능하다면 원래 cnt, 채널을 누른 개수와 +/- 를 누른 개수를 더한 값을 비교하여 cnt에 담는다. 

- 마지막 cnt 값이 채널로 가기 위한 최소 개수가 된다.

코드

import sys

n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
broken = list(map(str, sys.stdin.readline().split()))
cnt = abs(100 - n) # 리모컨을 눌러야하는 최대 개수

# 반복문을 통해 이동해야하는 채널로 가기 위한 방법을 확인
for i in range(1000001):

    # 반복문을 통해 채널로 이동하기 위해 눌러야 하는 번호가 고장이 났는지 확인
    for j in str(i):
        if j in broken:
            break

    # 채널로 이동 가능하다면 원래 cnt와 채널을 누른 개수와 +/- 를 누른 개수를 cnt에 담는다.
    else:
        cnt = min(cnt, len(str(i)) + abs(i - n))

print(cnt)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com