https://programmers.co.kr/learn/courses/30/lessons/42585
프로그래머스 쇠막대기 문제로 스택을 활용한 풀이 방법입니다.
문제의 그림을 보고 겁먹지 말고 차분히 막대의 개수를 세어보면 쉽게 풀 수 있는 문제였습니다.
'(' 와 ')' 가 바로 만나는 모양인 ()는 레이저라고 생각하면 되고 레이저가 발사되기 전 만나는 '(' 의 갯수만큼 쇠막대기가 추가됩니다.
그러나 이렇게 될 경우 마지막 막대기의 잘리는 부분을 카운트 할 수 없기때문에 고민했지만 ')'의 개수로 카운트 할 수 있습니다.
저는 이 문제의 카테고리가 스택/큐이기 때문에 당연히 스택부터 먼저 떠올려서 문제 풀이를 시작했습니다.
제가 생각한 코드작성 방법은 아래와 같습니다.
1. '()'을 다른 문자로 치환한다.
2. '(' 을 만나게 되면 스택에 담는다.
3. 치환한 문자를 만나게 되면 지금까지 스택의 개수만큼을 더해준다.
4. ')' 을 만나게 되면 +1을 하고 스택을 팝해준다. ( 쌍을 맞추기 위함, pop을 해주지 않을 경우 스택의 사이즈는 계속해서 증가함)
정답 코드
import java.util.Stack;
class Solution {
public int solution(String arrangement) {
int answer = 0;
Stack stack = new Stack();
String newArrangement = arrangement.replace("()", "0");
for(int i=0; i<newArrangement.length(); i++){
if(newArrangement.charAt(i) == '('){
stack.add(newArrangement.charAt(i));
} else if(newArrangement.charAt(i) == '0'){
answer += stack.size();
} else if(newArrangement.charAt(i) == ')'){
stack.pop();
answer+=1;
}
}
return answer;
}
}
잡설을 하자면. . 정말 알고리즘 풀이는 컨디션에 따라 정말로 많이 달라진다는걸 요즘 들어 계속해서 체감중입니다..
오늘은 컨디션이 좋았나봅니다.. ㅎㅎ
그리고 하루에 포스팅 하나가 제 목표인데 지킬 수 있을까요? ㅎㅎ
AWS 공부를 요즘 소홀히 했는데 AWS 공부도 다시 열심히 해봐야겠습니다!
'알고리즘' 카테고리의 다른 글
프로그래머스 - 위장 (1) | 2020.04.10 |
---|---|
프로그래머스 - 완주하지 못한 선수 (0) | 2020.04.10 |
프로그래머스 - 체육복(그리디) (2) | 2020.04.06 |
프로그래머스 - 숫자야구 (0) | 2020.04.04 |
프로그래머스 - 카펫 (2) | 2020.04.04 |