문제 설명
1. 현재 채널은 100에 있다.
2. 도착하고 싶은 채널과, 고장난 숫자들이 주어진다.
3. 위, 아래, 고장나지 않은 숫자들을 이용해 현재 위치에서 원하는 채널로 갈 때에 필요한 클릭 수를 구하면 된다.
풀이 과정
1. 완전탐색을 통해 해결 가능하다.
2. 현재 고장난 버튼들을 모두 기억한다.
3. 도착하고 싶은 채널의 최대숫자는 500000이기 때문에, 0~1000000까지의 모든 채널로부터 해당 채널에 도착하는 경우를 구한다.
4. 그리고 그 0~1000000의 채널에 대해 그 채널로 이동할 수 있는 경우(고장난 숫자가 없음)는 이동 후 +나 -를 통해 이동하면 된다.(차이의 절대값)
예를 들어 도착하고 싶은 채널이 1517, 고장난 숫자가 1, 4, 6로 주어진 경우
0번 채널 -> 숫자를 통해 0번 채널로 이동 가능(숫자 1회 클릭) -> 0번 채널로부터 +버튼을 통해 1517로 이동하기(+버튼 1517회 클릭) => 총 1518회 클릭함
1번 채널 -> 숫자를 통해 1번 채널로 이동 불가(1은 고장) -> 구할 필요 x
................
2000 채널 -> 숫자를 통해 2000채널로 이동 가능(숫자 4회 클릭) -> 2000채널로부터 -버튼을 통해 1517로 이동하기(-버튼 483회 클릭) => 총 487회 클릭함
...............
이 경우 최소값을 계속해서 구하면 487회가 최소임을 알 수 있다.
5. 그리고, 시작점이 100이라는 것을 알아야 한다. 예를 들어 102번 채널로 이동하고 싶은 경우, 따로 뭐 건드릴 필요 없이 +버튼을 두 번 클릭하면 된다. 따라서 처음에 원하는 채널을 입력받았을 때에 시작점 100채널로부터 해당 채널로 이동하는 경우를 먼저 구해서 넣어주면 된다.
코드
'알고리즘 공부' 카테고리의 다른 글
[백준 2636번] 치즈 - java (0) | 2022.01.29 |
---|---|
[백준 16234번] 인구 이동- java (0) | 2022.01.29 |
[백준 17265번] 나의 인생에는 수학과 함께 - java (0) | 2022.01.20 |
[백준 22352번] 항체 인식 - java (0) | 2022.01.07 |
[백준 1916번] 최소비용 구하기 - java (0) | 2021.12.29 |