Algorithm/Programmers
[Algorithm] Programmers :: 짝지어 제거하기
MaxLevel
2022. 5. 20. 07:45
https://programmers.co.kr/learn/courses/30/lessons/12973
코딩테스트 연습 - 짝지어 제거하기
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙
programmers.co.kr
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
32
33
34
35
36
37
38
|
int solution(string s)
{
int answer = -1;
stack<char> tempStack;
while (s.size() != 0)
{
char stand = s.back(); // 일단 뽑는다
s.pop_back();
char popedTempStack;
if (s.size() == 0) // 뽑고나서 스택에 아무것도 없으면 (비교할게 없으면)
{
if (tempStack.size() == 0) popedTempStack = '-';
else popedTempStack = tempStack.top();
if (stand == popedTempStack)tempStack.pop();
else tempStack.push(stand);
}
else // 뽑고나서 스택에 1개라도 있으면
{
if (stand == s.back()) s.pop_back(); // 연속된 수 있으면 빼버리기
else // 연속된 수 아니면 마찬가지로 tempStack top이랑 비교
{
if (tempStack.size() == 0) popedTempStack = '-';
else popedTempStack = tempStack.top();
if (stand == popedTempStack) tempStack.pop();
else tempStack.push(stand);
}
}
}
if (tempStack.size() == 0) return 1;
else return 0;
return answer;
}
|
cs |
약간 전형적인(?) 스택을 이용해서 푸는 문제인데, 사실 위 코드는 다른사람들의 풀이에 비해 지저분한 편이다.
말 그대로 당장 생각나는대로 구현한거라서 그렇다. 코딩테스트 준비자체를 이렇게 열심히 하는건 거의 처음이라서, 아직 각 유형에 대해 빠릿빠릿하게 구현이 떠오르지 않는다.
아래 코드는 다른 사람의 풀이이다. 딱봐도 어마무시하게 많이 차이가 난다.
비록 지금은 위의 코드처럼 짰지만, 다음엔 분명히 안그럴것이다.
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
|
int solution(string s)
{
stack<char> c;
int answer = 0;
for(int i=0; i<s.size(); i++){
if(c.size()==0){
c.push(s[i]);
continue;
}
if(c.top() == s[i])
{
c.pop();
}
else{
c.push(s[i]);
}
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
if(c.empty())
answer = 1;
else{
answer = 0;
}
return answer;
}
|
cs |