일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- n^2 배열 자르기
- 위클리 챌린지
- js
- 주식 가격
- 정수 삼각형
- 브루트포스 알고리즘
- react
- 5525
- 깊이 우선 탐색
- mermaid js
- 이분탐색
- 옵셔널 체이닝 연산자
- 10162
- 구간 합 구하기 4
- codeSyntaxHighlight
- 프로그래머스
- 없는 숫자 더하기
- 소수 체크
- BOJ
- colorSyntax
- Hasing
- C++
- Git Convention
- javascript
- 4796
- 2018 KAKAO BLIND RECRUITMENT
- 다이내믹 프로그래밍
- 숫자 문자열과 영단어
- 1620
- 18111
Archives
- Today
- Total
개발하는 kim-hasa
[c++][프로그래머스] 짝지어 제거하기 본문
https://programmers.co.kr/learn/courses/30/lessons/12973
코딩테스트 연습 - 짝지어 제거하기
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙
programmers.co.kr
붙어있는 단어를 제거하는 문제입니다. 처음에는 벡터로 풀었지만, 테스트케이스 13번이 문제가 생겨서 스택으로 바꾸어서 해결했습니다.
이론은 간단합니다. 한 단어씩 스택에 넣고, 맨 위와 다음에 넣을 단어가 같다면 제거하는 방식입니다. 이 때 모든 단어가 제거된다면 1을, 아니라면 0을 리턴합니다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int solution(string s)
{
int answer = 0;
if(s.length() % 2 == 1) // 길이가 홀수라면 무조건 불가
return answer;
stack<int> s1; // 계산하기 위한 stack
for(int i=0; i<s.length(); i++)
{
if(s1.empty())
s1.push(s[i]); // 비어있는 경우 추가
else
{
if(s1.top() == s[i]) // 스택의 맨 위와 같다면
{
s1.pop(); // 스택에서 제거
}
else
{
s1.push(s[i]); // 아닌경우 스택에 추가
}
}
}
if(s1.empty()) // 완료 후 비어있다면 모두 제거 가능
answer = 1;
return answer;
}
'Algorithm > Programmers(c++)' 카테고리의 다른 글
[c++][프로그래머스] N개의 최소공배수 (0) | 2021.08.23 |
---|---|
[c++][프로그래머스] 올바른 괄호 (0) | 2021.08.20 |
[c++][프로그래머스] 영어 끝말잇기 (0) | 2021.08.18 |
[c++][프로그래머스] 멀쩡한 사각형 (0) | 2021.08.18 |
[c++][프로그래머스] 피보나치 수 (0) | 2021.08.17 |