[구현] 1475 방 번호

Halo·2025년 5월 29일
0

Algorithm

목록 보기
54/85
post-thumbnail

🔍 Problem

1475 방 번호


📃 Input&Output


🌁 문제 배경

가. 문제 설명
다솜이의 방 번호를 숫자로 꾸미는 문제인데, 사려는 숫자들을 한세트로 묶여있고 한 세트에는 하나의 숫자들로 1~9까지 담겨져 있다. 그리고 6이 9를 대체할 수 있는 상황이다.

나. 접근 방법
생각해보아야 할 것은 다음과 같다.

  1. 숫자 세트의 수를 어떻게 구할 것인가?
  2. 6과 9의 경우 어떻게 처리할 것인가?

위의 해답을은 아래 해결 과정 에서 다룰 예정이다.

다. 사용할 알고리즘 선택
단순 구현


📒 해결 과정

가. 숫자 세트의 수를 어떻게 구할 것인가?
1. 숫자 세트의 수는 입력에서 한 글자씩 받고 숫자로 파싱한다.
2. 각 숫자의 개수를 저장할 배열을 만들고, 해당 인덱스에 각 숫자를 넣어 값을 +1 한다. 이렇게 하면 각 숫자의 count를 알 수 있다.

나. 6과 9의 경우 어떻게 처리할 것인가?

필자의 경우 6과 9의 케이스를 길이에 따라 나누어 보았고 다음과 같은 결론이 나왔다.

만약 6과 9의 각 count를 더한 값이 짝수이면 2를 나누고 홀수이면 2를 나누고 +1을 한다.

위와 같이 처리하면, 6이 9를, 9가 6을 대체하는 케이스들을 고려하여 세트 수를 구할 수. ㅣㅆ다.

다. 최소 세트 수는 어떻게 구할건데?
count를 저장해놓은 배열에서 가장 큰 값을 뽑으면 된다. 최소값이니까 가장 많은 수만큼 세트를 사야하기 때문이다.


💻 Code

import java.io.*;
import java.util.*;
import java.lang.*;

// 풀이
// 

public class P1475 {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);

        String[] N;
        int[] arr = new int[10];
        int max = 0;
        int tmp;


        N = sc.nextLine().split("");

        for (int i = 0; i < N.length; i++) {
            arr[Integer.parseInt(N[i])]++;
        }

        if ((arr[6] + arr[9]) % 2 == 0) {
            tmp = (arr[6] + arr[9]) / 2;

        } else {
            tmp = (arr[6] + arr[9]) / 2 + 1;
        }
        arr[6] = tmp;
        arr[9] = tmp;


        for (int i = 0; i < 10; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }

        System.out.println(max);
    }
}

🎸 기타

가. 길이

  • 문자열 : 문자열.length();
  • 배열 : 배열.length;

고놈 문자열만 메서드이다. 괄호를 낀단 말이다!!


🤔 느낀점

역시 직접 각 Case들을 손으로 써가며 푸는 것이 가장 효율적이고, 코드를 어떻게 짤 것인가에 대해 글로 먼저 적고 코딩하는 것이 중요하다는 생각이 들었다. 왜냐하면 큰 그림을 짜놓고 각 부분에 대한 로직은 차근차근 구해보면 되기 때문이다.

profile
새끼 고양이 키우고 싶다

0개의 댓글