본문 바로가기
자바 알고리즘/백준

백준 1475: 방번호

by hoshi03 2024. 5. 20.

문제

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

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

입력

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

출력

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

예제 입력 1 복사

9999

예제 출력 1 복사

2

예제 입력 2 복사

122

예제 출력 2 복사

2

예제 입력 3 복사

12635

예제 출력 3 복사

1

예제 입력 4 복사

888888

예제 출력 4 복사

6

 

풀이.. 랄 것도 없는 if else 노가다로 풀었다

 

6이랑 9가 서로 뒤집어서 쓸 수 있다는 것만 유의해서 조건문을 작성했다

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


class Main
{
    public static void main (String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int[] arr = new int[s.length()];
        for (int i = 0; i < s.length(); i++) arr[i] = s.charAt(i) - '0';

        int res = 0, tmp = 0;
        int[] count = new int[10];

        for (int i = 0; i < s.length(); i++){
            tmp = arr[i];
            //원소가 없을때
            if (count[tmp] == 0){
                if (tmp == 6 || tmp == 9){
                    if (count[6] == 0 && count[9] == 0){
                        for (int j = 0; j < 10; j++) count[j]++;
                        count[tmp]--;
                        res++;
                    }
                    else if (count[6] > 0) count[6]--;
                    else if (count[9] > 0) count[9]--;
                }

                else {
                    for (int j = 0; j < 10; j++) count[j]++;
                    count[tmp]--;
                    res++;
                }
            }
            // 원소가 잇으면 갯수를 하나 빼주기
            else count[tmp]--;
        }
        System.out.println(res);
    }
}