
문제 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;
}
}
}
}
}
}
'Problem Solving' 카테고리의 다른 글
[SolveSQL] 지역별 주문의 특징 (0) | 2025.02.05 |
---|---|
[SolveSQL] 할부는 몇 개월로 해드릴까요 (0) | 2025.02.05 |
[SolveSQL] 복수 국적 메달 수상한 선수 찾기 (0) | 2025.02.04 |
[SolveSQL] 쇼핑몰의 일일 매출액 (0) | 2025.02.04 |
[SolveSQL] 우리 플랫폼에 정착한 판매자 1 (0) | 2025.02.03 |