알고리즘 공부

[백준 1107번] 리모컨 - java

철매존 2022. 1. 22. 12:36
728x90

문제 설명

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채널로부터 해당 채널로 이동하는 경우를 먼저 구해서 넣어주면 된다.

코드