https://school.programmers.co.kr/learn/courses/30/lessons/133502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 작성한 코드
#include <string>
#include <vector>
using namespace std;
int MakeHamburger(int& answer, vector<int>& ingredient){
for(int i =0; i< ingredient.size() - 3; ++i){
if(ingredient[i] == 1
&& ingredient[i + 1] == 2
&& ingredient[i + 2] == 3
&& ingredient[i + 3] == 1){
++answer;
ingredient.erase(ingredient.begin() + i, ingredient.begin() + i + 3);
answer = MakeHamburger(answer, ingredient);
i += 4;
break;
}
}
return answer;
}
int solution(vector<int> ingredient) {
int answer = 0;
answer = MakeHamburger(answer, ingredient);
return answer;
}
erase는 요소를 지운 후 남아있는 요소들을 옮기는 작업까지 하기 때문에 시간이 걸린다.
찾아보니 Stack을 활용하라고 한다.
정답 코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> ingredient) {
int answer = 0;
vector<int> v = {-1};
for(int a : ingredient){
if(v.back() == 1 && a == 2)
v.back() = 12;
else if(v.back() == 12 && a == 3)
v.back() = 123;
else if(v.back() == 123 && a == 1){
v.pop_back();
++answer;
}
else
v.push_back(a);
}
return answer;
}
'알고리즘 공부' 카테고리의 다른 글
백준 14052번 연구소 C++ (0) | 2024.10.17 |
---|---|
ios::sync_with_studio(false), cin.tie(NULL), endl와 “\n” (0) | 2024.05.09 |
숫자 짝꿍 (0) | 2024.01.16 |
프로그래머스 136798. 기사단원의 무기 (1) | 2023.12.27 |
백준 10815번 숫자 카드 C++ (0) | 2023.10.16 |