알고리즘/BOJ

백준 2812번 크게 만들기

꾸준함. 2019. 11. 8. 12:30

문제 링크입니다: https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

문제 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000) 둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다. 출력 입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다. 예제 입력 1 복사 4 2 1924 예제 출력 1 복사 94...

www.acmicpc.net

수학적으로 생각해야하는 문제였습니다.

숫자의 배치는 임의로 조정할 수 없으므로 덱을 사용하여 현재 추가할 숫자가 그 전 숫자보다 작을 때까지 pop_back을 해주시면 됩니다.

결과를 출력할 때는 0 번째 인덱스부터 (덱 크기 - (K + 1)) 인덱스까지 출력해주면 됩니다.

 

#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, K;
cin >> N >> K;
string s;
cin >> s;
deque<char> dq;
for (unsigned int i = 0; i < s.length(); i++)
{
while (K && !dq.empty() && dq.back() < s[i])
{
dq.pop_back();
K--;
}
dq.push_back(s[i]);
}
for (unsigned int i = 0; i < dq.size() - K; i++)
{
cout << dq[i];
}
cout << "\n";
return 0;
}
view raw .cpp hosted with ❤ by GitHub

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1439번 뒤집기  (0) 2019.11.08
백준 1041번 주사위  (2) 2019.11.08
백준 17829번 222-풀링  (0) 2019.11.04
백준 17828번 문자열 화폐  (0) 2019.11.04
백준 17827번 달팽이 리스트  (0) 2019.11.04