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해버린다. 그러면 완성된건 빠지고 완성되지 않고 남아있던건 남는데 그 뒤에것과 붙여서 완성되는지 또 체크해볼 수 있다.