Lined Notebook

[Silver 5] [Java] 방 번호 (1475번)

by HeshAlgo

<방 번호>

문제 설명

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

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

 

제한 사항

입력

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

 

출력

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

내 생각

문제 난이도에 비해 시간이 오래 걸린 문제... 이렇게 오래 걸릴 문제가 아닌데 처음 입력을 int형으로 받아서 계속 오류가 떠서 시간이 오래걸린 것 같습니다. 결국 문자열로 입력받는걸로 바꾸어 문제를 해결했습니다. 6이랑 9를 처리할줄 알면 문제는 그렇게 어렵지 않았던 문제같았습니다. 6과 9의 개수를 합쳤을때 짝수 일경우 반으로 나누어 저장시키고, 홀수일 경우 반으로 나눈 값에 1을 더해주면 사용할 세트의 최소값을 구할 수 있습니다.  

 

걸린 시간

38분 12초

 

작성 코드

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
 
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String n = scan.next();
        int[] set = new int[10];
        
        for (int i = 0; i < n.length(); i++) {
            int num = n.charAt(i)-'0';
            set[num] += 1;
        }
 
        if ((set[6+ set[9])%2 == 0) {
            int sum = (set[6+ set[9])/2;
            set[6= sum;
            set[9= sum;
        } else {
            int sum = (set[6+ set[9]) / 2 + 1;
            set[6= sum;
            set[9= sum;
        }
        
        int answer = 0;
        for (int i = 0; i < set.length; i++) {
            answer = Math.max(set[i], answer);
        }
        System.out.println(answer);
    }
}
 
 
 

 

실행 결과

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기