티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/42585?language=java

 

코딩테스트 연습 - 쇠막대기 | 프로그래머스

여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레이저의 배치는 다음 조건을 만족합니다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있습니다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓습니다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재합니다. - 레이저는 어

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
 
class Solution {
    public int solution(String arrangement) {
        Stack<String> stack = new Stack<>();
 
        int answer = 0;
 
        String newArrangement = arrangement.replace("()""|");
 
        for(int i = 0; i<newArrangement.length(); i++) {
            String temp = String.valueOf(newArrangement.charAt(i));
 
            switch(temp) {
                case "(" : stack.push(temp); break;
                case ")" : stack.pop(); answer += 1break;
                case "|" : answer += stack.size(); break;
            }
        }
        return answer;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

레이저를 우선 "|" 요렇게 바꿔줘서 작업의 효율을 높여준다

그리고 레이저가 쏘면 두 개로 쪼개지니깐 레이저 갯수+1을 해주면 되겠다...

라고 생각해서 그런지  삽질을 무한으로 즐겼다

간단하게 막대기는 stack에 쌓인다

레이저로 자르면 stack에 쌓인만큼 잘린다

따라서 레이저를 만나면 스택에 있는 만큼 잘린 막대기 조각이 나온다

막대기의 끝부분도 조각으로 나오기 때문에 그것도 포함시켜준다

끝!

 

보다 자세한 그림으로 된 친절한 설명은 요기에

댓글