PS/백준

[BOJ] 백준 1475번 : 방 번호 (JAVA)

제이온 (Jayon) 2020. 5. 6.

문제의 링크 : https://www.acmicpc.net/problem/1475

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

문제

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

풀이

문제의 조건을 그대로 구현하는 문제였습니다. 주어진 방 번호를 한 자리씩 보면서 해당하는 숫자에 해당하는 플라스틱 숫자를 줄이고, 부족할 경우 새로 구입하는 것이 전부입니다.

다만, 6 또는 9는 하나로 처리하는 것이 수훨하기때문에 0~8까지 총 9가지 종류의 플라스틱 숫자를 담은 배열을 선언한 후, 플라스틱 숫자가 필요할 때마다 이를 새로 구입하면 됩니다. 그리고 구입할 때마다, 배열의 인덱스 6을 제외한 나머지 요소는 1 증가, 인덱스 6에 해당하는 요소는 2를 증가해 줍니다.

또한, 주어진 방 번호 N을 한 자리씩 끊어서 보아야하기때문에 N이 0이 아닐 때까지 10을 나누면서 반복문을 돌렸습니다. 그리고 그 과정에서 위 로직을 적용한 것이 바로 아래 코드입니다.

소스 코드

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
 
public class Main {
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
 
        int[] plastic = new int[9];
        buySet(plastic);
 
        int cnt = 1;
        
        // 일의 자리부터 N자리까지 차례로 탐색.
        while (N != 0) {
            int temp = N % 10;
 
            if (temp == 9) { // 9는 6으로 취급.
                temp = 6;
            }
 
            if (plastic[temp] == 0) { // 현재 가지고 있는 플라스틱 숫자의 개수가 0이라면 새로 구입.
                buySet(plastic);
                plastic[temp]--;
                cnt++;
            } else { // 아니라면, 해당 플라스틱 숫자의 개수 감소.
                plastic[temp]--;
            }
 
            N /= 10;
        }
 
        bw.write(cnt + "\n");
        bw.flush();
        bw.close();
        br.close();
    }
 
    // 새로운 플라스틱 숫자 세트 구입.
    public static void buySet(int[] plastic) {
        for (int i = 0; i < 9; i++) {
            if (i == 6) { // 9는 6과 같은 취급.
                plastic[i] += 2;
            } else {
                plastic[i] += 1;
            }
        }
    }
 
}
 

 

지적 혹은 조언 환영합니다! 언제든지 댓글로 남겨주세요.

댓글

추천 글