본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-1475(방번호)

반응형

문제(출처)

다솜이는 은진이의 옆집에 새로 이사왔다. 

다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.


다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 

한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 

다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. 

(6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)


입력

첫째 줄에 다솜이의 방 번호 N이 주어진다. 

N은 1,000,000보다 작거나 같은 자연수 또는 0이다.


출력

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


예제 입력

9999


예제 출력

2



내 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int[] num = new int[10];
//      9를 제외하고 구할 예정이지만 헷갈릴 수 있으니 0-9까지 선언합니다.
        try {
            String strNum = br.readLine();
            for(int i =0; i < strNum.length(); i++){
                if((strNum.charAt(i) == '6') || strNum.charAt(i) == '9') {
//                  6이나 9이면 6번째 인덱스를 증가시킵니다.
                    num[6]++;
                }else {
                    int idx = strNum.charAt(i)-48;
//                  숫자에 해당하는 인덱스의 숫자를 증분합니다.
                    num[idx]++;
                }
            }
            num[6] = (num[6] / 2) + (num[6]%2);
//          한 세트에 2개를 쓸 수 있으므로 6번째 인덱스의 몫과 나머지를 2로 구합니다.
            int max = num[0];
            for(int i = 1; i < num.length; i++) {
//              최고 값을 구합니다.
                max = Math.max(max, num[i]);
            }
            
            bw.write(String.valueOf(max));
            
            bw.flush();
            bw.close();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


내 풀이 해석

0~9까지 세트로 되어 있는 상자에서 중복으로 사용 할 수 있는 숫자는 6과 9입니다.
1231456이면 가장 많이 사용되는 1로 인해 두 세트를 사야합니다.
가장 많이 사용하는 수를 찾고 6과 9는 2로 나눈 몫과 나머지를 더해 구합니다.


반응형