문제 URL

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

 

 

문제 설명 요약

  • 1부터 N까지의 숫자를 오름차순으로 적어둠
  • 적어둔 숫자 리스트에서 몇개 지워버림
  • 주어진 숫자는 지워지고 남은 숫자들을 하나로 이은 숫자
/// 예시 (입력 : 234092 / 출력 : 20)
예상할 수 있는 원본 숫자 리스트 : 2 / 3 / 4 / 10 / 19 / 20
N의 최솟값 : 20

 

 

문제 풀이

  • input : 입력 데이터를 쪼갠 배열 (각 원소를 '조각 숫자' 라고 부름)
  • cur : 원본 숫자 배열 내 포함되는지 판별하는 대상 숫자
  • 1씩 증가하는 cur 변수를 자릿수마다 쪼갠 배열을 탐색하며
    -> 각 자릿수 중 조각 숫자와 같은지 판별하고
    -> 같다면 인덱스 1 증가 후, 다음 반복으로 넘어가기 전 인덱스의 유효성 판단
  • 가능한 가장 작은 숫자로 조각 숫자를 포함하는 값을 찾아나가는 방식

 

Swift를 활용한 풀이

let input = readLine()!.map{Int(String($0))!}
var cur = 0
var idx = 0

outer: while(true) {
    cur += 1
    let list = String(cur).map{Int(String($0))!}
    for s in list {
        if(input[idx] == s) { 
            idx += 1
            if(idx >= input.count) {
                print(cur)
                break outer
            }
        }
    }
}

 

Java를 활용한 풀이

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] input = br.readLine().toCharArray();
        int len = input.length;
        int cur = 0;
        int idx = 0;
        
        outer: while(true) {
            cur++;
            char[] cur_list = Integer.toString(cur).toCharArray();
            for(char c : cur_list) {
                if(c == input[idx]) {
                    idx++;
                    if(idx >= len) {
                        System.out.println(cur);
                        break outer;
                    }
                }
            }
        }
    }
}

+ Recent posts