문제를 풀자
[프로그래머스] 큰 수 만들기(C++)
말린malin
2022. 8. 11. 21:13
https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
(대회 준비 겸, 코테도 파이썬으로 쳐보려 했는데
구글링 안되기도 하고 얼마 남지 않아 우선은 C++로 공부하기로 했다.)
이 문제는 String answer을 스택으로 활용하여 풀었다.
answer에는 큰 수가 들어올 수 있도록 number와 비교하며 넣어준다.
첫 번째 테스트케이스인 "1924"로 해보자면,
1 |
(answer)
1 | 9 | 2 | 4 |
(number)
1. answer이 비었으므로 i=0번째 원소 넣어주고 continue
1 | 9 | 2 | 4 |
2. answer 끝 원소(1)<9이므로 지운다. k=1
9 |
1 | 9 | 2 | 4 |
3. answer이 비었으므로 9을 넣어준다.
9 | 2 |
1 | 9 | 2 | 4 |
4. 9>2이므로 answer에 2를 넣어준다.
9 |
1 | 9 | 2 | 4 |
5. answer 끝 원소(2)<4이므로 지운다. k=0
9 | 4 |
1 | 9 | 2 | 4 |
6. 4를 붙인다.
다 끝나도 k=0이 아니라면, 뒤에 숫자들, 즉 작은 숫자를 지워주면 된다.
코드 가독성이 좋지 않은 것 같다. 더 노력해야겠다.
#include <string>
using namespace std;
string solution(string number, int k) {
string answer = "";
for(int i=0;i<number.size();i++)
{
if(answer.empty())
{
answer+=number[i];
continue;
}
//answer 끝 원소와 number 조회 원소
//answer 끝 원소가 작다면, 빼주고 그 다음 끝 원소와 또 비교해보아야 함.
if(answer[answer.size()-1]<number[i]&&k>0)
{
answer.erase(answer.begin()+answer.size()-1);
k--;
i--;
}
else
answer+=number[i];
}
while(k>0)
{
//k=0까지 마지막 원소 제거
answer.erase(answer.begin()+answer.size()-1);
k--;
}
return answer;
}