시냅스

백준 boj 1107 - 리모컨 (파이썬, python) 본문

알고리즘

백준 boj 1107 - 리모컨 (파이썬, python)

ted k 2022. 2. 10. 20:33

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net

 

현재 채널을 기준으로 고장난 버튼을 제외한 버튼을 눌러 최소한으로 목표 채널까지 도달하는 문제였다.

5457의 경우 5455 혹은 5459 에서 2번을 ++하거나 --하여 이동하는 것으로 5455(4) + ++ (2)로 총 6이다.

현재 채널의 경우, 100으로 만약 100이 목표채널로 설정되면 그냥 0을 출력,

또 고장난 버튼이 없다면 목표채널의 길이값을 출력해주면 된다.

 

브루트포스를 활용해 전체 가능성을 전부 체크하였다.

문제는 어렵지 않았고, 시간도 넉넉했으나 개인적으로는 while문 조건을 주는 것에서 시간이 좀 걸렸다.

부족한 코드라 고치고 싶은 부분도 있지만, 기록을 위해 남겨둬야겠다!

 

code

 

n = int(input()) # 이동해야 하는 채널
m = int(input()) # 고장난 버튼 갯수
if m: # m이 있으면 input값 받음
    broken = list(input().split())
else:
    broken = list()

result = abs(100 - n) # 현재 거리 - 이동해야 할 거리, 결과값으로 쓸 것
check = 0
while check <= 1000001:
    cnt = 0
    for b in broken: # check로 for문 돌려서 broken에 포함되어있으면 break 바로 줘도 될듯...
        if b not in str(check):
            cnt += 1
    if cnt == len(broken): # broken에 없다는 게 판별 됐으면
        result = min(result, len(str(check)) + abs(n - check)) # result 값 갱신
    check += 1
print(result)

 

Comments