‡ CODING TEST STUDY ‡/º 백준

[백준 | Java Silver V] (#1475) 방 번호

Trudy | 송연 2024. 7. 25. 20:43

문제

https://www.acmicpc.net/problem/1475


접근

 

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

 

0~9까지 숫자 세트가 있고, 6,9는 뒤집어서 이용할 수 있다. 즉, 같은 거로 간주하면 된다.

0~9까지의 숫자 개수를 Map 형태로 저장하고, 6과 9는 같은 거로 간주해서 반으로 나눠주어서 총 개수 중 가장 큰 것을 출력하면 된다. 

 

최종 코드

package week12.baek.july26.baek;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class S1475 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String n = br.readLine();

        Map<Integer, Integer> map = new HashMap<>();

        // 각 숫자의 개수를 센다
        for (int i = 0; i < n.length(); i++) {
            int digit = n.charAt(i) - '0';
            map.put(digit, map.getOrDefault(digit, 0) + 1);
        }

        // 6과 9의 개수를 더하고, 반으로 나눈 뒤 올림
        int count6 = map.getOrDefault(6, 0);
        int count9 = map.getOrDefault(9, 0);
        int count69 = (count6 + count9 + 1) / 2; // 올림 계산

        // 최대 값을 찾기
        int max = count69;
        for (int i = 0; i <= 9; i++) {
            if (i == 6 || i == 9) continue;
            max = Math.max(max, map.getOrDefault(i, 0));
        }

        System.out.println(max);
    }
}