백준

[백준] 방 번호 (JAVA)

코 밑 2025. 2. 1. 19:26
Contents

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

 

다솜이가 자신의 방 번호를 문 앞에 붙이기 위해 필요한 플라스틱 숫자 세트가 몇개나 필요한지 출력하는 문제.

여기서 숫자는 6, 9가 공용으로 사용된다.

 

테스트코드 9999 입력 시

6, 9가 공용으로 사용된다.

다시 말해 한 세트에 9가 두개인 셈

두 세트만으로 충분하다.

 

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

// 백준 방 번호
// 0 ~ 9까지 있는 플라스틱 숫자 세트를 번호로 표현하기 위해서 몇 개나 필요한지 반환
// ex) 6은 6, 9로 사용 가능
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        // 숫자 카운터. 6, 9는 6번째 배열을 공용으로 사용
        // 0, 1, 2, 3, 4, 5, 6, 7, 8
        int[] number_cnt = { 1, 1, 1, 1, 1, 1, 2, 1, 1 };

        // 숫자세트 초기 1개
        int set = 1;
        for (int i = 0; i < str.length(); i++) {
            // 해당하는 숫자 카운터 제거
            if (str.charAt(i) == '6' || str.charAt(i) == '9') {
                number_cnt[6]--;
            } else {
                number_cnt[Character.getNumericValue(str.charAt(i))]--;
            }

            // 아스키 코드로 나오기 때문에 Character 클래스의 getNumbericValue 함수 사용
            // -48로 대체 가능
            int tmp = (Character.getNumericValue(str.charAt(i)) == 9) ? 6 : Character.getNumericValue(str.charAt(i));

            // 다 쓰면 한 세트 추가
            if (number_cnt[tmp] < 0) {
                set++;
                for (int j = 0; j < number_cnt.length; j++) {
                    if (j == 6)
                        number_cnt[j] += 2;
                    else
                        number_cnt[j]++;
                }
            }
        }

        System.out.println(set);
    }
}

 

각 숫자별 카운터 배열을 선언해서 사용할 때마다 1씩 감소하게 했다.

9는 6번째 배열과 공용으로 사용해서

초기값은 {1, 1, 1, 1, 1, 1, 2, 1, 1}로 해주었다.

 

만약에 0 미만인 배열이 발생하게 되면

set를 증가하게 하고 각 배열에 1씩 추가해주었다.

여기서 6번째 배열은 2씩 추가해주었다.

 

각 자릿수에 대한 배열에 접근하기 위해 문자를 정수로 변환해주려 했는데

아스키코드 번호로 나와서 당황했다.

해결하기 위한 두가지 방법이 있다.

1. 아스키 코드에서 -48

정수에 해당하는 아스키 코드는 다음과 같다

48(0) ~ 57(0)

따라서 해당 정수에서 48을 빼주면 정수를 얻을 수 있다.

 

2. Character 클래스의 getNumbericValue 함수 사용

 

'백준' 카테고리의 다른 글

[백준] 문자열 집합 (JAVA)  (0) 2025.02.03
[백준] 이친수 (JAVA)  (3) 2025.02.03
[백준] 보물 (JAVA)  (2) 2025.02.01
[백준] 요세푸스 문제 0 (JAVA)  (2) 2025.02.01
[백준] 수 찾기(1920) (JAVA)  (3) 2023.07.27