백준 1874번 스택 수열

Hongjun·2022년 12월 12일
0

자료구조

목록 보기
2/2


해당 문제는 주어진 1부터 n까지의 숫자를 스택을 이용하여 넣고 빼면서 주어진 수열을 만들 수 있는지를 판단하는 문제이다.

개인적 처음에 문제를 제대로 이해하지 못하였는데,1부터n까지의 숫자를 갖고있고 해당 숫자를 스택에 넣었다가 빼야지만 주어진 수열을 만드는데 쓸 수 있는 규칙인거 같다.
또한, 스택에서 뺀 순간 수열에 포함 되기때문에 주어진 수열을 만들 수 없을수도 있다.

해당 문제를 풀때 필요한 규칙이다.

1) 수열을 이루는 숫자는 스택에서 꺼내야 한다.
2) 스택의 숫자는 무조건 오름차 순으로 들어가야 한다.
3) 스택에서 pop한 숫자는 무조건 수열에 들어간다.


이게 내가 만든 풀이이다. 더 좋은 풀이가 무조건 있을꺼라고 생각이 들만큼 문제를 제대로 풀지 못했다고 생각한다.

위 풀이에서의 조건은

1)수열의 숫자가 스택의 top의 숫자보다 클때
2)수열의 숫자가 스택의 top의 숫자보다 작을때
3)수열의 숫자가 스택의 top의 숫자랑 같을때

우선 나는 stack에 0을 미리 넣어주고, 마지막으로 스택에 넣은 숫자를 idx라는 변수를 통해 표시해 놨다.

1번 조건이 실행될때, 수열의 숫자(num)와 같아질때 까지 stack에 숫자를 push해주고 +를 answer리스트에 넣어 줫다. 또한, 마지막으로 stack에 넣은 숫자는 idx에 저장해줫다.

2번 조건이 실행될때는 수열이 해당 stack으로 만들 수 없는 경우이다. 수열의 num 가 stack에 top보다 작은경우 top 부터 뺄 수 있는 stack은 위에서의 문제 규칙 3번에 의해 수열을 만들 수 없게되기 때문에 answer리스트를 비워주고 "No"를 넣은 후 for문을 break해줫다.

3번 조건이 실행될때는 stack의 top이 수열의 숫자(num)과 같음으로 answer리스트에 "-"를 넣어주고 stack을 pop 시켜줬다.

그리고 최종적으로 answer 리스트를 출력양식에 맞게 출력해줫다.

profile
실패가 과정인 개발자가 되자

0개의 댓글