프로그래머스 짝지어 제거하기
2021. 1. 7. 15:09ㆍ알고리즘
짝지어 제거하기 : programmers.co.kr/learn/courses/30/lessons/12973
코딩테스트 연습 - 짝지어 제거하기
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙
programmers.co.kr
이 문제는 greedy문제였다.
그냥 풀면 된다.
하지만 그냥 그리디로 푼다면 테스트 케이스는 다맞을 순 있겠지만 효율성까지 맞을 순 없다.
따라서 Stack자료구조를 사용 하였다.
import java.util.*;
class Solution
{
public Stack<Integer> stack = new Stack<Integer>();
public int solution(String s) {
char[] cArr = s.toCharArray();
int idx1 = 0, idx2 = 1;
while (idx2 < s.length()) {
if (cArr[idx1] == cArr[idx2]) {
cArr[idx1] = ' ';
cArr[idx2] = ' ';
if (stack.isEmpty()) {
idx2 += 2;
idx1 = idx2 - 1;
} else {
idx1 = stack.pop();
idx2 = idx2 + 1;
}
} else {
stack.push(idx1);
idx1 = idx2;
idx2++;
}
}
if (new String(cArr).trim().isEmpty()) {
return 1;
}
return 0;
}
}
먼저 인덱스를 두개를 설정하여 비교 한다.
두 인덱스의 문자가 같지 않다면 idx1의 값을 스텍에 넣고 두 인덱스를 한칸씩 전진 한다.
반대로 두 인덱스의 문자가 같다면 해당 자리에 공백 문자를 넣고 스텍이 비어있다면 idx2는 두칸을 전진 하고 idx1은 현재 idx2의 이전칸인 idx2-1위치로 업데이트 시켜준다.
만약 스텍이 비어있지 않다면 idx1은 스텍에서 하나를 빼내어 그 값을 주고 idx2는 한칸을 전진한다.
이번 문제는 어렵진 않았지만 효율성에서 Stack을 떠올리지 못하여 시간을 잡아먹은 케이스이다 ㅠ
그래도 짝을 지을때는 Stack을 사용하면 좋다는 것을 알았으므로 좋은 경험이었다^^
'알고리즘' 카테고리의 다른 글
프로그래머스 점프와 순간이동 (0) | 2021.01.11 |
---|---|
프로그래머스 소수 만들기 (0) | 2021.01.07 |
프로그래머스 N개의 최소 공배수 (0) | 2021.01.06 |
프로그래머스 JadenCase 문자열 만들기 (0) | 2021.01.05 |
프로그래머스 수식 최대화 (0) | 2021.01.05 |