새소식

반응형
알고리즘/c++

[프로그래머스] level2 짝지어 제거하기 - C++

  • -
728x90
반응형

정답률 높은순으로 푸는중인데

이제 점점 정답률 50%대에 가까워지는중 .. 안돼 ~ ..

 

무튼

첨엔 생각하기 귀찮아서 투 포인터로 풀려고했당..

포인터 두개 써서 둘이 일치하면 해당 자리의 char을 뭐 0으로 바꾸거나 해서 하는식으로..

근데 그러면 좀 복잡해지더군 ㅋㅎ

 

가령,,

a 0 0 b b a ~~ ..

위와 같은 상황이랄까 할때

뒤에서 따라오는 역할의 포인터가, 만약 0을 가리킬때? 이런 조건을 다 분기처리해야해서

 

쏘 귀찮 ㅋ 오히려 배로 귀찮아지길래

아 레벨투인데 절대이럴리 없다 걍 스택 써야겠다 ㅋ 했음

 

스택으로 구현해서 풀었다

흔히 계산기? 전위표기 후위표기 (prefix postfix) 같은거 하듯이~~

 

반복문 내에서 i 증가시키면서, 가리키는 곳과 스택의 back의 값이 불일치 할때마다 그 값들을 스택에 넣어서

마지막에 스택이 empty가 아니면 0을 리턴하는 방식!

 

#include <string> #include <vector> using namespace std; int solution(string s) { int answer = 1; vector<char> stack; char before=s[0]; stack.push_back(before); for(int i=1;i<s.length();i++){ // 문자열 끝 안났는데 stack 비어있을 경우 if(stack.empty()){ stack.push_back(s[i]); continue; } before=stack.back(); if(before==s[i]){ // 일치 stack.pop_back(); }else{ //불일치 stack.push_back(s[i]); } } if(!stack.empty()) answer=0; return answer; }
반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.