본문 바로가기
코딩 테스트/탐색

[백준 1107번] 리모컨 문제 풀이

by 서영선 2023. 9. 10.

 

< 문제 > 

 

 

 

 

 

< 입출력 >

 

 

 

 

 

< 풀이 >

앞자리수 부터 해당 숫자가 있으면 해당  숫자를, 없으면 +1, -1의 값을 저장해서 모든 경우의 수를 최솟값으로 비교하려니 코드가 너무 복잡하고 길어졌다.

이 문제는 단순하게 for 문으로 가능한 모든 값을 하나씩 비교해서 최솟값을 구하도록 단순하게 생각해야했다.

이떄, 채널 0에서 -를 누른 경우에는 채널이 변하지 않지만, 채널은 무한대 만큼 있다는 조건이 있으므로, 채널을 밑으로 내려오는 경우를 고려해 채널 수인 50000의 2배인 100000까지 비교해야 한다.

 

++) 추가

for i in str(500):
    print(i)

위의 코드 결과값은 

5

0

0

이 나온다.

 

각 자리수를 비교할 때 정말 유용할 것 같다👍👍

 

 

 

 

< 코드 >

N = int(input())
M = int(input())
ans = abs(100 - N)              # 원하는 채널과 현재 채널(100)의 차이를 최댓값으로 선언

if M != 0:                      # 고장난 버튼이 있는 경우
    b = list(input().split())
else:
    b = []

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))  # 현재 최솟값과 (채널의 자릿수 + +/- 버튼을 누르는 개수) 중 최솟값을 저장  

print(ans)

'코딩 테스트 > 탐색' 카테고리의 다른 글

[백준 1027번] 고층 건물 문제 풀이  (0) 2023.11.05
[백준 12919번] A와 B 2 문제 풀이  (0) 2023.11.04
[백준] 2805번 나무 자르기  (0) 2023.07.25
[백준] 1654번 랜선 자르기  (0) 2023.07.24
탐색 문제 풀이  (0) 2023.07.23

댓글