Baekjoon Online Judge #1107: 리모컨 (URL)
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
Problem (문제 원문)
수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.
리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.
수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오.
수빈이가 지금 보고 있는 채널은 100번이다.
Restrictions (제약사항)
시간 제한: 2초
메모리 제한: 256MB
Input (입력)
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러 번 주어지는 경우는 없다.
Output (출력)
첫째 줄에 채널 N으로 이동하기 위해 버튼을 최소 몇 번 눌러야 하는지를 출력한다.
Examples (예제)
Input | Output |
5457 3 6 7 8 |
6 |
100 5 0 1 2 3 4 |
0 |
500000 8 0 2 3 4 6 7 8 9 |
11117 |
100 3 1 0 5 |
0 |
Design (프로그램 설계)
Algorithm Category (알고리즘 분류)
Bruteforcing
- 채널을 설정하는 최적의 경우를 계산하는데 별다른 효율적인 방법이 존재하지 않는다.
- 아래 경우 중 버튼을 최소로 누르는 경우를 계산하여 정답으로 출력한다:
- 목표 채널 이상의 채널들 중 Available한 버튼으로 직접 접근할 수 있는 가장 작은 채널 번호로 이동한 후,
(+) 버튼으로 목표 채널에 접근하는 경우
(\(\texttt{upper_cnt}\))
- 목표 채널 이하의 채널들 중 Available한 버튼으로 직접 접근할 수 있는 가장 큰 채널 번호로 이동한 후,
(-) 버튼으로 목표 채널에 접근하는 경우
(\(\texttt{lower_cnt}\))
- 오직 (+/-) 버튼으로만 목표 채널에 접근하는 경우
(\(\texttt{brute_forcing_cnt}\))
Exceptions (예외사항)
None
Implementations (구현)
* GitHub (URL)
GitHub - ByeongHeonLee/Algorithms: Implementation of fundamental algorithms
Implementation of fundamental algorithms. Contribute to ByeongHeonLee/Algorithms development by creating an account on GitHub.
github.com
Performance (성능)
성공..!