아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사전순으로 가장 작은 부분 수열

면접 대비

시간 제한2초메모리 제한512 MB

요약
문자열 s와 정수 k가 주어질 때, s의 길이 k인 부분 수열 중 사전순으로 가장 작은 것을 출력한다.
난이도

보통10점 중 5점

유형
스택, 그리디, 문자열, 투 포인터
정답자
아직 제출이 없습니다

문제

문자열 ss와 정수 kk가 주어진다. ss에서 길이가 kk인 부분 수열 중 사전순으로 가장 작은 것을 구한다.

입력

첫 번째 줄에 문자열 ss가 주어진다. (1≤∣s∣≤1061 \le |s| \le 10^6) ss는 알파벳 소문자로만 이루어져 있다.

두 번째 줄에 정수 kk가 주어진다. (1≤k≤∣s∣1 \le k \le |s|) kk는 결과로 만들 부분 수열의 길이이다.

출력

ss에서 길이가 kk인 부분 수열 중 사전순으로 가장 작은 것을 출력한다.

힌트

문자열 sp1sp2…spks_{p_{1}}s_{p_{2}}\dots s_{p_{k}} (1≤p1<p2<⋯<pk≤∣s∣)(1 \le p_{1} < p_{2} < \dots < p_{k} \le |s|)를 문자열 ss의 부분 수열이라고 한다.

문자열 x=x1x2…xkx = x_{1}x_{2}\dots x_{k}가 문자열 y=y1y2…yky = y_{1}y_{2}\dots y_{k}보다 사전순으로 작다는 것은, x1=y1,x2=y2,…,xi−1=yi−1x_{1} = y_{1}, x_{2} = y_{2}, \ldots , x_{i-1} = y_{i-1}이면서 xi<yix_{i} < y_{i}인 ii (1≤i≤k)(1 \le i \le k)가 존재한다는 뜻이다. 문자열의 문자는 ASCII 코드로 비교한다.

예제1

  1. 예제 1

    입력
    bcaabac
    4
    
    예상 출력
    aaac