You will be fine

<Algorithm> 97. 쇠막대기(프로그래머스)

by BFine
반응형

1. 쇠막대기(프로그래머스)

  • 레벨2 문제라 우습게 봤다가 결국 다른 블로그를 보고 맞춘 문제

  • 어떤 문제든 규칙을 찾는게 중요하다는 것을 느꼈다.

  • lambda로 풀면서 지역변수는 foreach문안에서 변경이 불가능 하다는 것을 알게 되었다. must be final or effectively final

  • 그래서 참조형이면 될까 싶어서 배열로 바꿨는데 배열은 수정이 되었다. 이부분은 잘 인지해 두어야 겠다.

  • 어떤 풀이는 String.replace("()","~~")로 바꿔서 풀었던데 어떻게 그런 창의적인 발상을 할 수 있는지 나도 더 노력해야겠다.

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
39
40
41
import java.util.Stack;
import java.util.stream.IntStream;
 
public class Solution {
      public int solution(String arrangement) {
            Stack<Character> stack = new Stack<>();
            int[] res = new int[1];
            char[] prev = new char[1];
            /******************************
             * (는 판자  ()가 같이 들어오면 레이저이다.
             * ()를 기점으로 앞에 잘린 판자의 수는 
             * (의 갯수가 된다. 이때 레이저가 여러개
             * 일때는 앞에 레이저가 자른 갯수와 같다.
             * 레이저를 기점으로 뒤에 잘린 판자수는
             * )의 갯수와 같다. 그러므로 )들어올떄
             * pop을 해주고 레이저면 스택의 갯수를 더하고
             * 판자면 +1 만 처리해 주면 된다. 
             * 
             * ex)
             * 
             * (  ( ( ) )  )  (   (  ( )  )     ( )    )
             *   --- | ---        --- | ---   |
             * ----- | -----   ------ | ------ | -----
             *******************************/
       IntStream
               .range(0, arrangement.length())
               .mapToObj(i->arrangement.charAt(i))
               .forEach(i->{
                   if(i == ')') {
                       stack.pop();
                        res[0= prev[0== '('? res[0]+stack.size() : res[0]+1;
                   }else {
                       stack.push(i);
                   }
                   prev[0= i;
               });
                            
            return res[0];
        }
}
 
cs


참고 & 출처  


https://jaemin8852.tistory.com/188 문제참고



https://feco.tistory.com/64 람다에서 지역변수 쓸수 없는 이유


반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기