티스토리 뷰

Q.1475

문제 :

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

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

 

입력 :

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

 

출력 :

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

 

<소스 코드>

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
import java.util.*;
 
public class Main{
    public static void main(String[] args) {    
        Scanner sc = new Scanner(System.in);
        int[] numbers = new int[10]; // 0~9 까지 숫자들의 카운트를 저장할 배열
        int cnt = 0;// 세트 갯수
        int n = sc.nextInt();
        
        while(n != 0) {
            if(n%10 == 6 || n%10 == 9) {// 현재 숫자가 6이나 9라면
                if(numbers[6< cnt) numbers[6]++;// 6의 갯수가 현재 셋트 개수보다 적다면 6 팻말 갯수 + 1
                else if(numbers[9< cnt) numbers[9]++// 9의 갯수가 현제 셋트 개수보다 적다면 9 팻말 갯수 + 1
                else {//6과 9 팻말 갯수가 현제 세트 갯수와 같다면
                    cnt++//셋트 한개 추가
                    numbers[n%10]++// 현재 팻말 갯수 + 1
                }
            }
            else {// 6과 9 외 기타 팻말의 경우
                if(cnt == numbers[n%10]) { //현재 팻말의 갯수가 세트 갯수와 같다면
                    cnt++// 세트 한개 추가
                    numbers[n%10]++//해당 숫자 팻말 + 1
                }
                else numbers[n%10]++// 셋트 갯수가 더 많다면 해당 숫자팻말 갯수 + 1
            }
            n /= 10// 다음 팻말로 
        }
        System.out.println(cnt);
    }   
}
cs

 

<실행결과>

 

<해법>

각 팻말의 갯수는 항상 세트 갯수보다 적거나 같다.

팻말의 갯수가 세트 갯수와 같다면 해당 숫자 팻말을 다 사용한 것이므로 더 사용하기 위해 세트를 하나 더 추가해야한다.

6과 9 숫자 팻말의 경우, 6과 9 어떤 숫자 인지 구분 없이 둘 중 세트 갯수보다 적은 숫자 팻말에 +1 을 하면 된다.

6과 9 숫자 팻말의 수가 현재 세트 갯수와 같다면 세트를 하나 더 추가, 해당 팻말 갯수도 +1 하면 된다.

 

while 숫자 팻말이 없어질 떄까지

if 현재 팻말이 6이나 9일 경우

if 6 갯수가 세트 갯수보다 적다면 6 갯수 +1

else if 9 갯수가 세트 갯수보다 적다면 9 갯수 +1 

else 6과 9 갯수가 셋트 갯수와 같을 경우

셋트 갯수 + 1

현재 숫자 팻말 갯수 +1

 

else 6과 9 이외 팻말의 경우

if 현재 숫자의 갯수와 셋트 갯수가 같다면

셋트 갯수 +1

해당 숫자 갯수 +1

else 셋트 갯수가 더 많다면

해당 숫자 갯수 +1 

 

세트 갯수 출력

 

 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/problem/1475



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

댓글