본문 바로가기

Algorithm/PS

[1일 1알고] 110 옮기

https://school.programmers.co.kr/learn/courses/30/lessons/77886

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

오늘도 간단한? 문제입니다. (한번 틀림)

 

110을 뽑아내고 이를 올바른 위치에 삽입하는 문제입니다.

 

읽자마자 stack을 사용해야하는 것을 알 수 있습니다.

 

110자체는 stack방식을 통해 추출하면 될 일이고, 이후 이 110들을 어디에 삽입할지를 결정해야합니다.

 

사전 순으로 110이 들어가는 위치는 마지막으로 0이 들어간 위치가 됩니다.

왜냐하면 1110과 같은 문자열이 남아있을 수 없기 때문입니다.


#include <string>
#include <vector>

using namespace std;

vector<string> solution(vector<string> s) {
    vector<string> answer;


    for (string& word : s)
    {
        vector<char> stack;
        int cnt_1 = 0;
        int cnt_110 = 0;
        for (char ch : word)
        {
            if (ch == '1')
            {
                stack.push_back('1');
                ++cnt_1;
            }
            else
            {
                if (cnt_1 >= 2)
                {
                    cnt_1 -= 2;
                    ++cnt_110;
                    stack.pop_back();
                    stack.pop_back();
                }
                else
                {
                    cnt_1 = 0;
                    stack.push_back('0');
                }
            }
        }
        int N = stack.size();
        int idx_0 = -1;
        for (int i = N - 1; i >= 0; --i)
        {
            if (stack[i] == '0')
            {
                idx_0 = i;
                break;
            }
        }
        string ans;

        if (idx_0 == -1)
        {
            for (int i = 0; i < cnt_110; ++i)
            {
                ans += "110";
            }
            for (int i = 0; i < N; ++i)
            {
                ans += stack[i];
            }
        }
        else
        {
            for (int i = 0; i < N; ++i)
            {
                ans += stack[i];
                if (i == idx_0)
                {
                    for (int i = 0; i < cnt_110; ++i)
                    {
                        ans += "110";
                    }
                }
            }
        }
        
        answer.push_back(ans);
    }

    return answer;
}

 결론적으로 코드는 위와 같은 형태가 됩니다.

'Algorithm > PS' 카테고리의 다른 글

[1일 1알고] 경주로 건설  (0) 2026.05.13
[1일 1알고] 부대 복귀  (0) 2026.05.12
[1일 1알고] 스타 수  (0) 2026.05.10
[1일 1알고] 카운트 다운  (0) 2026.05.09
[1일 1알고] 기둥과 보 설치  (0) 2026.05.08