< 문제 >
< 입출력 >
< 풀이 >
앞자리수 부터 해당 숫자가 있으면 해당 숫자를, 없으면 +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 |
댓글