[프로그래머스/C++]Lv.1 - 햄버거 만들기

YH J·2023년 5월 19일
0

프로그래머스

목록 보기
89/168

문제 링크

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

내 풀이

일단 ingredient를 string으로 변환했다.
그 후 for문을 돌리면서 substr로 4의 길이를 뽑아서 1231과 같으면 answer++하고
해당 부분을 erase한다. 그 다음 i를 되돌리는데 앞에 잘렸던 부분이 123이였을 경우는 없으므로 12인지만 보면 된다. 그래서 2칸 뒤로 간다.

내 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<int> ingredient) {
    int answer = 0;
    
    string in;
    for(const auto& i : ingredient)
        in += (i + '0');
    string burger = "1231";
    string s;
    for(int i = 0; i < in.size(); i++)
    {
        if(in[i] == '1')
        {
            s = in.substr(i,4);
            if(burger == s)
            {
                answer++;
                in.erase(i,4);
                i -= 3;
                if(i < 0)
                    i = -1;
            }
        }
    }
    
    
    return answer;
}

다른 사람의 풀이

#include <string>
#include <vector>
using namespace std;

int solution(vector<int> ingredient) {
    int answer = 0;
    vector<int> v = { -1 };
    for(int x : ingredient){
        if(v.back() == 1 && x == 2) v.back() = 12;
        else if(v.back() == 12 && x == 3) v.back() = 123;
        else if(v.back() == 123 && x == 1) answer++, v.pop_back();
        else v.push_back(x);
    }    

    return answer;
}

다른 사람의 풀이 해석

stack느낌으로 구현
int 형 vector 하나 만들어놓고 숫자를 넣어가면서 back이 1이고 넣어야 될 숫자가 2면 back을 12로 바꿈.
그다음 back이 12고 넣어야되는게 3이면 back을 123으로 바꿈
그다음 back이 123이고 넣어야 되는 숫자가 1이면 1231이 완성되므로 answer++한 뒤 back을 pop해버린다. 그러면 완성된건 빠지고 완성되지 않고 남아있던건 남는데 그 뒤에것과 붙여서 완성되는지 또 체크해볼 수 있다.

profile
게임 개발자 지망생

0개의 댓글