반응형
백준 1107번 문제 - 리모컨
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이
www.acmicpc.net
문제 분석

- 100번 채널에 있는 수빈이가 채널을 N까지 이동하려면 버튼을 최소 몇번 눌러야하는지 출력해라.
- 리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있고, 일부 숫자 버튼은 고장났다.
- +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다.
- 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.
해결 포인트
어려워 죽을 뻔 했습니다 (결국 못풀었다)
- 완전 탐색 사용
- 결과의 초기 값은 원하는 숫자와 100의 차이 값
- Math.abs(n) : n의 절대값
- 0부터 Math.abs(targer-i) 까지 확인
- 해당 수를 만들기 위해 고장난 버튼이 필요한 경우 그만
- 고장난 버튼을 사용하지 않을 경우, 해당 숫자 자리 수 + 원하는 숫자 - 현재 숫자
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int target = scan.nextInt();
int m = scan.nextInt();
boolean[] broken = new boolean[10];
for(int i = 0; i < m; i++) {
int n = scan.nextInt();
broken[n] = true;
}
int result = Math.abs(target - 100); //초기값 설정
for(int i = 0; i <= 999999; i++) {
String str = String.valueOf(i);
int len = str.length();
boolean isBreak = false;
for(int j = 0; j < len; j++) {
if(broken[str.charAt(j) - '0']) { //고장난 버튼을 눌러야 하면
isBreak = true;
break; //더 이상 탐색하지 않고 빠져나온다.
}
}
if(!isBreak) { //i를 누를때 고장난 버튼을 누르지 않는다면
int min = Math.abs(target - i) + len; //i를 누른 후(len) target까지 이동하는 횟수(target - i)
result = Math.min(min, result);
}
}
System.out.println(result);
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 9019] DSLR (JAVA) (1) | 2024.01.06 |
---|---|
[백준 5430] AC (JAVA) (1) | 2024.01.06 |
[백준 16928] 뱀과 사다리 게임(JAVA) (1) | 2024.01.02 |
[백준 10026] 적록색약 (JAVA) (1) | 2024.01.02 |
[백준 6064] 카잉 달력 (JAVA) (1) | 2023.12.28 |