Competition/Baekjoon

[백준] 1107번 자바 리모컨

bisi 2020. 4. 17. 12:26
문제 출처 

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- 완전탐색 알고리즘을 사용하여 모든 케이스들을 생각해내야 한다.

- 조건 1. 100이면 count 0

- 조건 2. 리모콘이 고장 나지 않았으면, 배열의 숫자만큼 또는 리모컨 +- 한 count 중 최소값

- 조건 3. 리모콘이 고장 났으면,  고장난 리모컨으로 누를수 있는 숫자 케이스와 리모컨 +- 한 count 중 최소값

 

 

- 아래는 정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String n = sc.next();
        int m = sc.nextInt();
        int[] remocon = new int[10];
 
        for (int i = 0; i <m ; i++) {
            int val = sc.nextInt();
            remocon[val] = -1;
        }
 
        if(n.equals("100")){
            System.out.println(0);
        }else{
            int min = Integer.MAX_VALUE;
            String v = "";
            String closer = "";
 
            for (int i = 0; i <1000000 ; i++) {
                boolean isOk = true;
                v = i+"";
                for (int j = 0; j <v.length() ; j++) {
                    if(remocon[v.charAt(j)-'0'== -1){
                        isOk=false;
                        break;
                    }
                }
                if(isOk){
                    if(min > Math.abs(Integer.parseInt(n) - Integer.parseInt(v))){
                        min = Math.abs(Integer.parseInt(n) - Integer.parseInt(v));
                        closer = v;
                    }
                }
            }
 
            int result1 = Math.abs(Integer.parseInt(n)-100);
            if(closer.equals("")){
                System.out.println(result1);
            }else {
                int result2 = Math.abs(Integer.parseInt(n) - Integer.parseInt(closer))+ closer.length();
                if(result1 > result2){
                    System.out.println(result2);
                }else {
                    System.out.println(result1);
                }
            }
        }
    }
 
 
}
 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 1525번 자바 퍼즐  (0) 2020.04.18
[백준] 1476번 자바 날짜계산  (0) 2020.04.16
[백준] 11399번 자바 ATM  (0) 2020.04.09