본문 바로가기
알고리즘/코딩 - 백준

[Java][자바][백준][1475번] 방 번호

by 주남2 2019. 8. 23.
반응형

문제 설명

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

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

입력

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

출력

첫째 줄에 필요한 세트의 개수를 출력한다.

 

생각

0,1,2,3,4,5,6,7,8,9의 카드가 있다. 예를 들어 1~9까지는 1장만있는데 0만 3장이라면 카드는 3세트가 필요하다.

하지만 만약에 9가 4장이고 0,1,2,3,4,5,7,8 이 1장씩 필요하다고 하자. 이 경우에는 6과 9는 서로 쓸 수 있으므로 2세트만 있으면 된다. 하지만 5장이라면 3세트가 필요하게 된다. 따라서 6과 9를 합친 경우 홀수라면 (6과 9의 개수)/2 + 1을 해주면 된다.

 

 

배열을 만들고 방 번호를 10씩 나눠주면서 각 숫자에 맞는 인덱스의 값을 증가시켜준다. 여기서 6이나오면 9를 증가시켜줘서 6을 제외한 0~8까지의 최대값과 9가 필요한 최대값을 비교하여 카드 팩 수를 구한다.

 

코드

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
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] n1 = new int[10];
        int temp = n;
        
 
        //10씩 나눠주면서 각 자리의 숫자에 맞는 인덱스의 값을 증가시켜준다.
        //6이 나오면 9를 증가시켜준다.
        while(temp!=0) {
            int k = temp%10;
            if(k==6 || k==9) {
                n1[9]++;
            } else {
                n1[k]++;
            }
            temp /= 10;
        }
        
        //6을 제외한 0~8까지의 숫자의 최대값을 구하는 변수이다.
        int max_to_eight = 0;
        
        for(int i=0; i<n1.length-1; i++) {
            if(max_to_eight <= n1[i]) {
                max_to_eight = n1[i];
            }
        }
        
        int six_or_nine = 0;
        
        //9의 개수가 짝수일 때와 홀수일때를 나눠서 생각해준다.
        if(n1[9]%2==0) {
            six_or_nine = n1[9]/2;
        } else {
            six_or_nine = n1[9]/2 + 1;
        }
        
        //둘중의 최대값을 구한다. 여기서 나온 최대값이 필요한 최소 카드 팩의 수이다.
        //만약 n=0이면, while문이 돌지 않고 넘어가므로 1이라고 예외 처리를 해준다.
        int real_max = (int) Math.max(max_to_eight, six_or_nine);
        if(n==0) real_max = 1;
        System.out.println(real_max);
        
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

스캐너만 안썼으면 시간이 더 줄었을탠데..! 왜 이때 스캐너를 썼는지 모르겠다..

반응형