<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 람다에서 지역변수 쓸수 없는 이유
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 99. K번째수(프로그래머스) (0) | 2019.02.02 |
---|---|
<Algorithm> 98. 더맵게(프로그래머스) (0) | 2019.02.01 |
<Algorithm> 96. 완주하지 못한 선수(프로그래머스) (0) | 2019.01.30 |
<Algorithm> 95. 무지의 먹방라이브(KAKAO) (0) | 2019.01.29 |
<Algorithm> 94. 타켓넘버(프로그래머스) (0) | 2019.01.28 |
블로그의 정보
57개월 BackEnd
BFine