Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 회고
- 마크다운
- BFS
- 정수론
- Greedy
- Python
- 분할정복
- 몬티홀
- DP
- 그래프탐색
- springboot
- 브루트포스
- 구현
- deque
- g1gc
- 그래프 탐색
- 문제풀이
- 적정 스레드
- GarbageCollector
- Stack
- 배열 돌리기1
- 빌더패턴
- github
- GC
- 이진탐색
- 면접복기
- 그리디
- Markdown
- 프로세스
- 백준
Archives
- Today
- Total
FeelingXD
[백준-1107] 리모컨 ✨ 본문
❓ Problem
🤔 How
답이될수 있는 경우 👀
1. 현재 보고있는채널(100) 에서부터시작해서 +/- 버튼으로만 목표 채널까지 이동하는 경우
2. 버튼을 사용해서 특정 채널로 변경한후애 +/- 버튼을 추가로 사용해 목표 채널까지 이동하는 경우 (2가지 : 위로가는 경우와 아래로가는 경우)
접근방법
- 답이 될수있는경우 [1]번 으로 정답값을 초기화해준다.
- 그후 목표 채널로부터 위/ 아래로 값을 탐색해 고장난 버튼을 사용하지 않고 이동할수있는 최초의 수를 찾아서 원래 가고자한 목표채널과의 차이를 더해주고. 답이 최소값이 될경우 갱신한다.
- 현재 구하고자하는것은 버튼누르는 횟수이므로 처음 채널이동시 누르는 버튼횟수도 생각하여야한다. ex) 7751 채널로 이동시 버튼을 4번누른다.
❗ Solve
# 리모컨
import sys
input =sys.stdin.readline
def solution():
target=int(input())
len_error_btn=int(input())
err_btns=[]
if len_error_btn:
err_btns=list(map(str, input().strip()))
# 기본답 100 채널에서 +- 로만 이동하는경우
ans=abs(target-100)
#상한선
for i in range(target,target+(ans+1)):
c_target=str(i)
if not(set(err_btns) & set(c_target)):
ans=min(ans,len(c_target)+abs(int(c_target)-target))
break
#하한선
for i in range(target,target-(ans+1),-1):
c_target=str(i)
if not(set(err_btns) & set(c_target)):
ans=min(ans,len(c_target)+abs(int(c_target)-target))
break
print(ans)
pass
if __name__=="__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[프로그래머스 - 118667 ] 두 큐 합 같게 하기 (0) | 2024.01.13 |
---|---|
[백준-2240] 자두나무 🍒 (0) | 2024.01.12 |
[백준 - 14940] 쉬운 최단거리 🐢 (0) | 2024.01.02 |
[백준 - 2293] 동전 1 🟡 (0) | 2024.01.01 |
[백준- 2343] 기타레슨 🎸 (0) | 2023.12.31 |