[백준/Java] 1475번 : 방 번호

김하밍·2023년 10월 10일

알고리즘

목록 보기
2/22

1. 문제

숫자 0부터 9까지 1개씩 들어있는 숫자 세트가 있다.
방 번호 N이 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하라.

조건
1. 6과 9는 뒤집어서 이용할 수 있다.
2. N은 1,000,000보다 작거나 같은 자연수이다.

문제 출처


2. 문제 분석

  1. 0에서 9까지의 숫자의 갯수를 담은 배열 numSet 생성합니다.
  2. 6과 9는 뒤집어서 사용할 수 있으므로 같은 경우의 수로 묶어 합산합니다.
    => ex) 6이 3개, 9가 2개 일 때, 필요한 총 세트수는 3개입니다.
    => 즉, 합산 수가 홀수라면 2로 나누어 올림을 하거나, 애초에 1을 더하여 2로 나누어 나오는 값이
    6과 9에 해당하는 최종 세트수가 되어 sixAndNine 에 저장합니다.
  3. 이제 6과 9를 제외한 나머지 숫자에 해당하는 세트수를 구합니다.
    방번호에 출현한 숫자의 갯수 중 가장 큰 수를 maxSet에 저장합니다.
  4. 마지막으로, maxSetsixAndNine 를 비교하여 가장 큰 수를 결국 필요한 총 세트수로 출력합니다.

3. 제출한 코드

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 n = Integer.parseInt(N);
        if (n < 1 || n > 1000000) {
            System.out.println("N은 1 미만, 1,000,000 초과의 수는 입력될 수 없습니다.");
            return;
        }
        
        int[] numSet = new int[10];  // N 에 출현하는 0 ~ 9까지의 숫자의 갯수를 저장할 배열

        for (int i = 0; i < N.length(); i++) {
            numSet[N.charAt(i) - '0']++;    // N 에 출현하는 숫자의 갯수를 저장
        }
        // 6과 9에 대한 경우의 수 구하기
        int sixAndNine = (numSet[6] + numSet[9] + 1) / 2;
        
        int maxSet = 0;
        for (int i = 0; i < 10; i++) {
            if (i != 6 && i != 9) {
                maxSet = Math.max(maxSet, numSet[i]);
            }
        }
        
        System.out.println(Math.max(maxSet, sixAndNine));
    }
}
profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글