문제
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
아이디어
1. channel이 100이면 그냥 리턴한다.
2. 모든 버튼이 다 고장 나면 +,- 로만 이동한다
3-1. channel로 이동할 수 있는 버튼이 있으면 그 버튼을 누른다.
3-2. 그 버튼이 없으면 제일 가까운 버튼을 찾아 누르고 3단계를 종료한다
4 3단계를 진행했는데 버튼의 개수가 channel의 개수보다 작으면 적절한 키를 찾아 나머지 자릿수를 채운다
4-1 만약 이미 선택한 버튼으로 내가 보고싶은 채널 이상이 만들어진다면 나머지 키는 현재 누를 수 있는 버튼의 제일 작은 값으로 채운다
4-2 만약 이미 선택한 버튼으로 내가 보고싶은 채널 이하로 만들어진다면 나머지 키는 현재 누를 수 있는 버튼의 제일 큰 값으로 채운다
5. 누를 버튼이 만들어졌으면 +나 - 개수를 센다. 이때 절댓값을 이용한다
6.+,-로만 이동하는 경우와 숫자버튼을 눌러 +-로 이동하는 경우 중 더 작은 값을 리턴한다
import sys
# from collections import deque
channel=input()
button=['0','1','2','3','4','5','6','7','8','9']
m=int(input())
#고장난 버튼 없음
if m==0:
print(len(channel))
sys.exit()
broken_set=set(input().split())
button=list(set(button)-broken_set)
now='100'
if channel==now:
print(0)
sys.exit()
# 모든 숫자 버튼이 다 고장남
if not button:
print(abs(int(channel)-int(now)))
sys.exit()
press_num=[]
for c in list(channel):
if c in button:
press_num.append(c)
else:
min_diff=10
replace_button=c
for b in button:
if min_diff>abs(int(c)-int(b)):
replace_button=b
min_diff=abs(int(c)-int(b))
press_num.append(replace_button)
break
if len(channel)>len(press_num):
index=len(press_num)-1
if int(press_num[index])>int(channel[index]):
add_num=str(min(map(int,button)))
else:
add_num=str(max(map(int,button)))
while len(channel)>len(press_num):
press_num.append(add_num)
tmp=int(''.join(press_num))
print(min(abs(tmp-int(channel))+len(channel) ,abs(int(channel)-int(now))))
문제에 나와있는 예제는 다 맞는데 이 글에 있는 반례는 아직 해결 못했다.
글 읽기 - ****리모컨 질문게시판에있는 모든 반례 모음****
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
이후 추가하겠습니다
'dev. > python' 카테고리의 다른 글
(백준) 1260. DFS와 BFS / python / 문제 해결 (0) | 2022.06.05 |
---|---|
42883. 큰 수 만들기 / python / 커뮤러닝 5기 코딩테스트 실력 UP 패키지 : 문제 풀이 꿀팁과 실전 모의고사 (0) | 2022.06.04 |
42746. 가장 큰 수 / python / 커뮤러닝 5기 코딩테스트 실력 UP 패키지 : 문제 풀이 꿀팁과 실전 모의고사 (0) | 2022.06.04 |
42862. 체육복 / python / 커뮤러닝 5기 코딩테스트 실력 UP 패키지 : 문제 풀이 꿀팁과 실전 모의고사 (0) | 2022.06.03 |
42576. 완주하지 못한 선수 / python / 커뮤러닝 5기 코딩테스트 실력 UP 패키지 : 문제 풀이 꿀팁과 실전 모의고사 (0) | 2022.06.02 |