쉬운 구현문제
일단 저번에도 코드그라운드의 "괄호" 라는 문제 풀이를 올렸었다.
그 문제보다는 훨씬 쉽게 풀었다.
일단 문제를 보면 올바른 괄호인지를 체크해야 한다.
그러면 무조건 스택이다. (or [ 가 나오면 배열에 넣고 )or]가 나오면 빼면된다.
이런식으로 스택을 조절해서 만약 ']'인데 스택의 TOP에 '[' 이 아니거나
')' 인데 '(' 가 스택의 TOP이 아니면 바로 멈추고 0을 출력한다.
또는 다 검사했는데 스택의 사이즈가 1 이상이라면 0을 출력한다.
만약 괄호조건이 맞으면 계산을 해야하는데
이 조건을 맞추면된다.
이때 A*(B+C) = A*B + A*C 라는 조건을 안다면 모두 풀 수 있다.!!!!!!
N의 범위가 30 이하이므로 30*30은 1초안에 넉넉히 들어오는것을 확인가능하다.
그러면 그냥 계속 탐색 할 수 있다.
나는 값들을 계속해서 넣을 배열을 한 개 더 만들었다.
내가 계산하는 방법은
여는 괄호 ( '(' OR '[' )가 나오면 0을 집어 넣는다.
그리고 닫는 괄호가 나오면 배열의 마지막 인덱스부터 0을 찾을때까지
해당 배열 값에 ) 는 2, ] 는 3을 곱해주며 더해준다.
그리고 0이 나오는 값에 지금까지 더해준 값들을 더해준다.
그러면
(()[[]])([])이런 인풋에서는
0 -> 0 , 0+2 -> 0 , 2 , 0 , 0 -> 0 , 2 , 0 , 0+3 -> 0 , 2 , 0 , 3*3 -> 0 , 2 , 9
-> 0 , 2 , 9 * 2 -> 0 , (2 * 2+ 9 * 2) -> 22 ,
이런 과정이 나타난다.
마지막엔
22 와 6이 들어온다.
다 더하면 답이나오고 그 답을 출력하면 된다.
소스로 보면 더 쉬울 수도 있다.
댓글 없음:
댓글 쓰기