백준 1107번 - 리모컨

윤여준·2022년 5월 14일
0

백준 풀이

목록 보기
2/35
post-thumbnail

문제

문제 링크 : https://www.acmicpc.net/problem/1107

풀이

브루트포스 문제이다.

0번 채널부터 999999번 채널까지 for문을 통해 돌면서 이동하려고 하는 채널 n까지 버튼을 몇 번 눌러야 하는지 계산하고 최솟값을 구해서 출력하면 된다.

for문을 통해 0번 채널부터 차례대로 돌 때, 고장난 버튼을 눌러야 하는 경우는 건너뛴다.

이 문제를 풀 때, 몇 번 채널까지 탐색을 진행할지를 잘 설정해주어야 한다. 또한 채널의 초기값이 100번이므로 100번에서 n번 채널까지는 숫자 버튼을 누르지 않고 +,- 버튼만 눌러도 된다는 점을 주의해야한다.

from sys import stdin

n = int(stdin.readline()) # 이동하려는 채널
m = int(stdin.readline()) # 고장난 버튼의 개수

button = [i for i in range(10)] # 버튼 리스트
delList = [] # 고장난 버튼 리스트
result = abs(100 - n) # result의 초기값은 100번 채널에서 +,-버튼 만을 통해 n번 채널로 이동할 때 버튼을 누르게 되는 횟수
if m != 0: # 고장난 버튼의 개수가 0이 아닐 때만 입력을 받음
    delList = list(map(int,stdin.readline().split()))

for i in delList:
    del button[button.index(i)] # 버튼 리스트에서 고장난 버튼을 삭제해줌

# 0번 채널부터 999999번 채널까지 반복
for i in range(1000000):
    iList = list(str(i))
    tf = True
    for j in iList:
        if int(j) in button:
            continue
        tf = False # 만약에 i번 채널로 한번에 이동할 때 고장난 버튼을 누르게 되면 tf를 False로 바꾸고 break
        break
    if tf == False: # 만약 고장난 버튼을 눌러야 하면(tf == False 이면) continue
        continue

	# 만약 고장난 버튼을 누르지 않아도 된다면, i번 채널에서 n번 채널까지 가기 위해 버튼을 누르는 횟수와 result 값을 비교해서 그 값이 작다면 result에 대입
    if abs(i - n) + len(str(i)) < result:
        result = abs(i - n) + len(str(i))

print(result)
profile
Junior Backend Engineer

0개의 댓글