이 블로그 검색

2018년 7월 5일 목요일

[백준 2504] 괄호의 값

[ 백준 2504 : 괄호의 값 ]

쉬운 구현문제

일단 저번에도 코드그라운드의 "괄호" 라는 문제 풀이를 올렸었다.
그 문제보다는 훨씬 쉽게 풀었다.

일단 문제를 보면 올바른 괄호인지를 체크해야 한다.
그러면 무조건 스택이다. (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이 들어온다.
다 더하면 답이나오고 그 답을 출력하면 된다.

소스로 보면 더 쉬울 수도 있다.

댓글 없음:

댓글 쓰기

[백준 16236] 아기 상어

[ 백준 16236 : 아기 상어 ] 2018 삼성전자 sw직무 하반기 기출문제입니다. 역대 삼성전자 기출문제가 그렇듯 역시나 BFS,DFS,완탐,DP,단순구현 입니다. 저는 문제를 단순히 BFS로 풀어갔습니다. 조건만 잘 지킨다면 한번에 ...