[백준] 1874번: 스택 수열





처음엔 문제를 이해하는 것도 힘들었다ㅠㅠ
1부터 n까지 수로 입력받는 수열을 만드는 것이다.
(스택의 push, pop을 사용해서!)

나는 거꾸로 주어진 수열을 1부터 n까지의 수로 만들었다.
거꾸로 생각하는거니까 비디오 되감기하는 것처럼 생각해보면,
인덱스를 0부터 증가하면서 처리하는게 아니라 n부터 감소하면서 진행해야할 것이다.
하지만 나는 그렇게 하면 너무 복잡하다 생각해서
스택의 특성을 이용해서 주어진 수열을 거꾸로 뒤집었다.
다 push하고 다 pop했다.
(이때 pop는 return형식이 void이므로 top으로 다시 배열에 저장한뒤 pop해주었다.)

아무튼 주어진 수열이 뒤집어진 형태의 배열을 가지고 처리를 시작한다. 
원래는 1~n → 수열 인데
나는 뒤집어진 수열을 가지고 거꾸로 진행하는 거니까 생각해보면
뒤집어진 수열 → n~1
이렇게 된다.

일단 target을 n으로 저장해놓고
뒤집어진 수열이 저장되어있는 배열을 인덱스 0부터 차례대로 스택에 push한다.
push하고 스택에 있는 top이 target과 같으면 pop하도록 했다.
이런식으로 하면 n~1의 순서로 pop이 된다.

위와 같은 처리 과정에서 push할땐 문제와 반대로 '-'를,
pop할땐 '+'를 ans라는 스택에 순서대로 쌓아주었다.
이것마저도 스택에 쌓는 이유는
이것도 거꾸로 나오기 때문에 나중에 뒤집어주기 위해서다.

잘 진행이 되서 n~1이 잘 되면 스택은 비어있을 것이고
만들어지지 않는다면 스택은 비어있지 않을 것이다.
그래서 스택에 뭐가 남아있으면 만들어지지 않았다는 얘기니까
NO를 출력하고 return했다.

코드↓








댓글

이 블로그의 인기 게시물

[백준] 1850번: 최대공약수

[백준] 1717번: 집합의 표현