알고리즘/백준

[백준] 1475: 방 번호 (JAVA)

김호록님 2024. 6. 1. 09:43

문제

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

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

입력

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

출력

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

 

풀이 1 (틀림)

실버 5로 많이 어렵진 않은 문제 같은데.. 아이디어가 생각이 안 나서 일단 더럽게 짜봤고 당연히 틀렸다! ㅎㅎ..

6이랑 9 처리를 어떻게 해야 할까 고민하다가 잘 모르겠어서 다른 분 풀이를 참고했다.

배열 사용법도 아예 다르게 생각해야 하는 것 같다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String N = br.readLine();
        int[] arr = new int[10]; // 사용하지 않은 경우 0, 사용한 경우 1
        int cnt = 1;

        for (int i = 0 ; i < N.length(); i++) {
            int idx = N.charAt(i)-'0';
            if (idx == 6 || idx == 9) {
                if (arr[6] == 1 && arr[9] == 1) {
                    cnt++;
                    arr = new int[10]; // arr 초기화
                } else if (arr[6] == 1 && arr[9] != 1) {
                    arr[9] = 1;
                } else {
                    arr[6] = 1;
                }
            } else {
                if (arr[idx] == 1) { // 새로운 세트를 추가
                    cnt++;
                    arr = new int[10];
                } else {
                    arr[idx] = 1;
                }
            }
        }
        System.out.println(cnt);
    }
}

 

풀이 2 (맞음)

배열에 cnt +1을 해주면서 마지막에 가장 높은 수를 출력해야 한다. 6과 9는 배열 한 칸으로 처리하고, 마지막에 평균을 구하기 위해 2로 나누고 나머지 값을 더해준다.

배열에서 가장 큰 수를 찾아 출력하면 된다.

 

정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String N = br.readLine();
        int[] arr = new int[9]; // 6과 9는 하나로 합침

        for (int i = 0 ; i < N.length(); i++) {
            int idx = N.charAt(i)-'0';
            if (idx == 9) {
                arr[6]++;
            } else {
                arr[idx]++;
            }
        }
        arr[6] = (arr[6] / 2) + (arr[6] % 2);
        Arrays.sort(arr);
        System.out.println(arr[8]);
    }
}