문제를 풀자

[프로그래머스] 큰 수 만들기(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
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 2
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;
}