📙 Algorithm Solving/Java

📙[Algo] 24.01.06 알고리즘

혜덕hyeduck 2024. 1. 6. 13:30
 

7696번: 반복하지 않는 수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스에는 정수 n(1 ≤ n ≤ 1,000,000)이 주어진다. n = 0인 경우 프로그램을 종료한다.

www.acmicpc.net

문제요약
같은 숫자를 두 번 이상 사용하지 않는 수 중 N번째 수 출력

시간 제한
1초

입력
N(1≤N≤1,000,000)
N이 0일 때 종료

출력
케이스별 N번째 반복 숫자 없는 수 출력

 

접근법

  • 메모리 문제 관련해서 공부해볼 수 있는 문제
  • N번째에서 N이 1000000까지 가능한 거였으니까, for문에서 num≤1000000할 게 아니라 배열의 인덱스를 1000000까지 탐색해야 한다.
  • 자릿수 하나하나 체크하면서 이미 1~9까지 이미 방문한 숫자를 또 방문한 경우를 제외한 반복하지 않는 숫자들을 ableNum배열에 담아준다.

 

코드

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

public class Main {
    static int[] ableNum = new int[1000010]; //마진은 넉넉하게
    static boolean[] visited = new boolean[10];

    static void makeCase() {

        int temp, remain;
        boolean check;
        for(int num=1, idx=1; idx<=1000000; num++){

            Arrays.fill(visited, false);
            temp=num;
            check = true;

            while(temp>0){
                remain = temp % 10;
                temp /= 10;

                if(visited[remain]) {
                    check = false;
                    break;
                }

                visited[remain] = true;
            }

            if(check) ableNum[idx++] = num;

        }

    }


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N;
        boolean[] check;
        makeCase();

        while(true){
            N = Integer.parseInt(br.readLine());

            if(N==0) break;

            System.out.println(ableNum[N]);

        }


    }
}