728x90
1. 백준 1107. 리모컨 (골5)
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이
www.acmicpc.net
풀이
CODE
import math
import sys
input = sys.stdin.readline
def plus_check(num, broken_list):
is_find = False
origin_num = num
while not is_find:
# 100번에서 +, - 버튼 누르는 게 더 효율적인 경우 break
if abs(num - origin_num) > abs(100 - origin_num):
return math.inf
for each in str(num):
if each in broken_list:
num += 1
is_find = False
break
else:
is_find = True
return len(str(num)) + (num - origin_num)
def minus_check(num, broken_list):
is_find = False
origin_num = num
while not is_find:
# 더 이상 갱신이 안되는 경우 break
if num < 0:
return math.inf
for each in str(num):
if each in broken_list:
num -= 1
is_find = False
break
else:
is_find = True
return len(str(num)) + (origin_num - num)
n = int(input())
num_of_broken_btn = int(input())
if n == 100: # 시작이 목적지인 경우
print(0)
elif num_of_broken_btn > 0:
if num_of_broken_btn == 10: # 다 고장난 경우
print(abs(100 - n))
else:
broken_btn = list(input())
print(min(plus_check(n, broken_btn), minus_check(n, broken_btn), abs(100 - n)))
else: # 고장난 버튼이 없는 경우
print(min(len(str(n)), abs(100 - n)))
- 반례가 무지무지 많았다! 너무 고민을 깊게 하지 않고 접근했던 것 같다.
- 틀리거나 반례가 생각나지 않으면 질문게시판에 너무 의존하는 것 같다. 앞으론 좀 더 반례를 고민한 후 질문게시판을 봐야겠다.
- 96% 정도에서 오답이 났는데 이를 해결한 반례는 '101'이 입력된 경우였다.
이 경우 101 버튼을 누르는 것보다 100에서 - 한 번 누르는 게 더 효율적이다.
728x90
'알고리즘' 카테고리의 다른 글
[백준/Python] 25603. 짱해커 이동식 (0) | 2023.09.25 |
---|---|
[백준/Python] 2660. 회장뽑기 (0) | 2023.09.25 |
[백준/Python] 14232. 보석도둑 (0) | 2023.09.24 |
[백준/Python] 6064. 카잉달력 (0) | 2023.09.24 |
[백준/Python] 13565. 침투 (1) | 2023.09.24 |