728x90
[백준] 1107번 - 리모컨 (!) (JAVA)
[접근 방법]
어떻게 접근해야 할까? 에 대한 대답은 쉽게 찾아 내었다.
부서진 번호가 포함되지 않은, N을 기준으로 가장 가까운 번호를 찾아내는 것이 관건 이었다.
브루트포스 알고리즘을 사용하여, 가능한 모든 채널 번호 부터 N까지 최소 누르는 수를 구하였다.
이동하려고 하는 채널인 N은 0 ~ 500_000 이지만, 9를 제외한 모든 버튼이 망가지는 경우, 999_999로 이동한 후, + / - 버튼을 눌러야 하므로, 0 ~ 999_999 까지의 수를 모두 고려하였다.
[JAVA 코드]
// 1476번 - 날짜 계산
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 0. 입출력 선언 / 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int E = Integer.parseInt(st.nextToken());
int S = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int result;
while(true){
int max = Math.max(E, Math.max(S, M));
if (E != max){
E += 15;
}
if (S != max){
S += 28;
}
if (M != max){
M += 19;
}
if (E == S && S == M){
result = E;
break;
}
}
bw.write(result + "\n");
br.close();
bw.close();
}
}
[Rewind]
1. 어려웠던 점
- 0 ~ 999_999 까지 모든 수를 고려하여 최소값을 구하는 프로그램 구현이 어려웠다. (전체적으로 다 어려웠음)
- NullPointer (런타임 에러) 가 발생하였다.
입력값으로
101
0
을 받는다면,
결과값은 1이 나와야 한다.
그러나 세번째 줄에 입력이 들어올때까지 프로그램이 무한 대기 상태가 된다.
따라서, 리모컨에 고장난 번호가 없는 경우, 세번째 줄은 입력을 받을 필요가 없다.
if (M != 0) 을 사용하여, 고장난 번호가 있는 경우에만 세번째 줄을 입력 받게 설정하였다.
2. 알게된 점
-
3. 개선 방향
- 비슷한 문제를 여러개 풀어야 한다.
728x90