백준 14382 자바

손찬호·2024년 6월 18일
0

알고리즘

목록 보기
66/91

풀이 아이디어

boolean[] digit10에 0~9의 숫자가 나왔는지 확인한다.
n==0이면 무조건 남은 자리를 채울 수 없으므로 "INSOMNIA"를 출력한다.
long number = n*i형태로 i는 1~♾️까지 1씩 더해가며 자릿수를 확인한다.
long cur=number인 cur에 %10을 해주며 각 자릿수를 확인한다.
각 자릿수를 확인하고 0~9까지 다 나오면 number를 출력하고 해당 테스트 케이스를 종료한다.

풀이 코드

import java.util.*;
import java.io.*;
public class _14382 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
        for(int i=1;i<=t;i++){
            long n = Long.parseLong(br.readLine());

            if(n == 0){
                System.out.println("Case #" + i + ": INSOMNIA");
                continue;
            }

            boolean[] digit10 = new boolean[10]; // 0~9까지의 숫자가 있는지 확인
            int count = 1; // 더할 숫자
            long number = 0; // 결과값
            boolean isEnd = false; // 종료여부
            //
            while(true){
                number = n * (long)count++;
                long cur = number;
                // 10으로 나누면서 0~9까지의 숫자가 있는지 확인
                while(cur > 0){
                    digit10[(int)(cur % 10)] = true;
                    // 0~9까지의 숫자가 모두 채워지면 종료
                    if(checkDigit(digit10)){
                        isEnd = true;
                        break;
                    }
                    cur /= 10;
                }
                if(isEnd){
                    break;
                }
            }
            // 결과 출력
            System.out.println("Case #"+i+": "+number);
        }
    }
    // 0~9까지의 숫자가 모두 있는지 확인하는 함수
    public static boolean checkDigit(boolean[] digit10){
        for(int i=0;i<10;i++){
            if(!digit10[i]){
                return false;
            }
        }
        return true;
    }
}
 
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보