문제 링크입니다: 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)) 인덱스까지 출력해주면 됩니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |


개발환경: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 |