본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Baekjoon] 1107 리모컨(자바스크립트/NodeJs)

by codingBear 2023. 1. 15.
728x90
반응형

 

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net


👨‍💻 문제

수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.

리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.

수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오. 

수빈이가 지금 보고 있는 채널은 100번이다.

입력

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러 번 주어지는 경우는 없다.

출력

첫째 줄에 채널 N으로 이동하기 위해 버튼을 최소 몇 번 눌러야 하는지를 출력한다.

예제 입력 1

5457
3
6 7 8

예제 출력 1

6

예제 입력 2

100
5
0 1 2 3 4

예제 출력 2

0

예제 입력 3

500000
8
0 2 3 4 6 7 8 9

예제 출력 3

11117

예제 입력 4

100
3
1 0 5

예제 출력 4

0

예제 입력 5

14124
0

예제 출력 5

5

예제 입력 6

1
9
1 2 3 4 5 6 7 8 9

예제 출력 6

2

예제 입력 7

80000
2
8 9

예제 출력 7

2228

힌트

예제 1의 경우 5455++ 또는 5459--


정답 코드

답안 1

답안 2


문제 풀이

 문제 풀이 시 유의할 점은 +, - 버튼으로도 조작이 가능하다는 점과 탐색할 숫자의 범위이다. 코드를 보면 100에서 n을 뺀 절댓값과 조건을 충족하는 값의 최솟값을 결괏값으로 반환한다. 이는 +, - 버튼으로 조작했을 때 조작 횟수가 더 적은 경우가 있기 때문이다. 예를 들어 목표 채널이 102이고 고장 난 버튼이 [3, 4]라고 하자. 이때 직접 채널 1 + 0 + 2 총 3회 입력하는 것 보다 + 버튼을 2번 눌러 채널을 이동하는 편이 더 빠르다. 따라서 최소 입력 횟수를 구하고자 한다면 현재 채널(100)에서 +, - 버튼만 사용해 이동한 횟수를 비교 대상으로 설정해둬야 한다.

 또한 이동하려고 하는 채널이 500,000만큼 주어진다고 해서 500,000 이하의 채널만 정답이 되는 것은 아니다. 이동하려는 채널이 500,000이고 고장 난 버튼이 [1, 2, 3, 4, 5]라고 가정하자. 이때 탐색 범위를 500,000으로 한다면 리모컨 조작 횟수는 500,000 - 100 = 499,900회가 될 것이다. 주어진 조건에서 가장 최선의 답은 채널 600,000에서 -버튼을 100,000번 누르는 것이다. 따라서 탐색 범위는 1,000,000으로 설정해야 한다.

 0부터 1,000,000까지의 숫자를 하나하나 조건문에 대입하다 고장 난 숫자와 일치하는 숫자가 나온다면 break로 반복문을 빠져나오고 조건을 통과한 숫자 조합 가운데 가장 작은 수를 정답 변수에 저장한다. 반복문을 마치고 최소 조작 횟수가 담긴 정답을 반환하면 된다.


함께 보기

 

 

[백준 1107 - Node.js] 리모컨

🔗 문제 링크 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고

tesseractjh.tistory.com

 

 

[백준] 1107번 리모컨 - 파이썬(Python)

문제 (링크) https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장

seongonion.tistory.com

 

 

[파이썬]백준 1107 리모컨

[파이썬]백준 1107 리모컨

velog.io

 

 

백준 1107(리모컨) 파이썬(python3) 해결

문제 링크 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장

zifmfmphantom.tistory.com

 

728x90
반응형

댓글