: 리모컨에는 버튼이 0부터 9까지의 숫자와 +,-로 되어있다.
+,-는 1씩 이동하며 채널은 0아래로 내려가지 않는다. 이동하고자 하는 채널 N이 주어지고 고장난 버튼이 주어질 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 물러야하는지 구하는 프로그램을 작성하시오. 현재 보고있는 채널은 100번이다.
: 채널에 접근하는 방법의 수는 3가지이다.
: 주의 할 점은 고장난 수가 있으면 직접 입력이 불가능하다는 것이다. 이를 위해 변수하나를 식별자로 사용하였다.
# check number
token = True
for i in N:
i = int(i)
if i in broken:
token = False
break
if token:
clicks.append(len(N))
# 2. +,- 만으로 이동하기
clicks.append(abs(int(N)-now))
: 역으로 +,-를 진행 후에 부서지지 않은 수로 완성할 수 있는지를 판별하였다.
# 1,2번 과정의 결과
limit = min(clicks)
up_count=0
up = int(N)
down_count=0
down = int(N)
# up,down 두 경우 판별해야한다.
while up_count+len(str(up))<limit:
token = True
up_count+=1
up+=1
for i in str(up):
if int(i) in broken:
token = True
break
else:
token = False
if not token:
limit = up_count+len(str(up))
break
while down_count+len(str(down))<limit and down>0:
token = True
down_count+=1
down-=1
for i in str(down):
if int(i) in broken:
token = True
break
else:
token = False
if token == False:
limit = down_count + len(str(down))
break
: 처음 문자열로 접근하였을 때 오히려 어렵게 풀이했던 것 같다. 아이디어를 생각하는 것이 생각보다 오래걸려 아쉬웠다.
문제 링크 : https://www.acmicpc.net/problem/1107
깃헙 코드 : https://github.com/poriz/baekjoon/blob/master/codes/1107.py