Leta Learns

[Python] 백준 1107번 - 리모컨 본문

Coding/백준

[Python] 백준 1107번 - 리모컨

leta 2022. 8. 18. 01:02

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

 

1107번: 리모컨

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

www.acmicpc.net

코드 풀이는 주석으로 적어놓았다.

모각코 시간에 풀었던 문제인데 감이 안 잡혀서 일단 무턱대고 풀었더니 말도 안 되는 코드가 나와서 구글링을 했다.

찾아보니 for - else문을 사용한 코드가 있길래 궁금해서 for-else문에 대해 조금 찾아보았다.

 


for - else문은 for문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행된 경우 else문이 실행되는 구문이다.

for문에 break 등 빠져나오는 구간이 없으면 else를 사용하지 않는다.

https://cagongman.tistory.com/30

 

Python :: for else 문 사용법

python 코딩을 하면서 if - elif - else 문은 많이 알고 많이 사용하지만 for - else 문은 편리한 문법임에도 불구하고 많이 모르고 사용을 안 하는 경우가 많은것 같습니다. for - else 문이 작동되는 과정

cagongman.tistory.com


 

import sys
input = sys.stdin.readline

n = int(input())
m = int(input())
ans = abs(100 - n)

if m != 0: #고장난 버튼 존재
    b = list(input().split())
else:
    b = []

#큰 수에서 작은 수로 내려오는 경우도 있으므로 1000000까지 for문 탐색
#작은 수 -> 큰 수: 0 ~ 500000, 큰 수 -> 작은 수: 500001 ~ 1000000
for i in range(1000001):
    for j in str(i):
        if j in b: #해당 숫자 버튼이 고장난 경우
            break
    else:
        ans = min(ans, len(str(i)) + abs(i - n)) #min(기존답, 숫자 버튼 클릭 수 + '+/-' 버튼 클릭 수)

print(ans)

Comments