본문 바로가기
Algorithm/Java

Baekjoon Online Judge _ 01475 _ 방번호

by autumnly 2017. 1. 4.

[ Baekjoon Online Judge _ 01475 _ 방번호 ]


문제

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

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

입력

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

출력

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

예제 입력

9999

예제 출력

2



풀이

먼저 크기10인 배열을 만들어서

방번호 각 자리의 숫자에 해당하는 인덱스를 1씩 늘려준다.

이렇게 하고 마지막에 가장 원소의 크기가 큰 인덱스가 필요한 세트의 개수가 된다.

이 때, 6과 9는 서로 구분없이 사용할 수 있기 때문에

둘의 값을 더해서 2로 나누어 주면 된다.

그리고 6이나 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
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String N = sc.next();
        int count[] = new int[10];
    
        for(int i = 0; i < N.length(); i++)
            count[N.charAt(i) - '0']++;
        
        //6과 9는 혼용할 수 있으므로 총 개수를 더해서 2로 나눈 몫+나머지 만큼의 셋트가 필요하다.
        count[6= count[9= (count[6+ count[9])/2 + (count[6+ count[9])%2;
        
        //최대값
        int max = count[0];
        for(int i = 1; i < 10; i++)
            if(count[i] > max) max = count[i];
        
        System.out.println(max);
    }
}
 
cs