Old/Algorithms

[JAVA] 프로그래머스 : 쇠막대기 (코딩테스트 고득점 kit > 스택/큐)

유뱅유뱅뱅 2020. 7. 14. 20:06

https://programmers.co.kr/learn/courses/30/lessons/42585

 

코딩테스트 연습 - 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레�

programmers.co.kr

스택을 이용하여 구현하였음
쇠막대기가 잘라지는 규칙을 찾아내면 쉽게 구현할 수 있는 문제임

먼저 () 나오는 부분은 레이저 이므로 l로 바꿔서 처리하였음
그리고 스택에 넣으면서
1. (가 나오면 push 해주고
2. l이 나오면 레이저가 지금까지 쌓인 ( 갯수 만큼 쇠막대기를 자름
3. )이 나오면 pop을 해주고 쇠막대기 끝 부분이므로 answer ++ 해줌 

import java.util.*;
// 쇠막대기
// 쇠막대기 잘라지는 규칙을 찾아내는게 중요
class Solution {
    public int solution(String arrangement) {
        int answer = 0;
        
        // () 찾아서 ㅣ로 바꿔주기
        arrangement = arrangement.replace("()", "l");
        
        Stack<Character> stack = new Stack<>();
        
        for(int i=0; i<arrangement.length(); i++){
            // ( 가 나오면 push
            if(arrangement.charAt(i)=='('){
                stack.push(arrangement.charAt(i));
            }
            // l 가 나오면 laser인데 stack size 만큼 잘라짐
            else if(arrangement.charAt(i)=='l'){
                answer += stack.size();
            }
            // ) 가 나오면 pop인데 1개 잘라짐
            else{
                answer++;
                stack.pop();
            }
        }
        
        return answer;
    }
}