Algorithm/백준

[백준 알고리즘] 25556번: 포스택 (Python)

에릭 Kim 2023. 8. 16. 15:55
반응형

https://www.acmicpc.net/problem/25556

 

25556번: 포스택

포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다.

www.acmicpc.net

 

소스코드

 

 

풀이

★ 핵심은 각각의 스택의 최상단 값보다 스택에 넣으려고 하는 값이 커야한다는 것입니다 ! 

 

ex) 

예제와 같이 5,4,3,2,1이 주어졌을 때 스택 4개에 5,4,3,2가 각각 들어가고 1이 아무 스택에나 들어간다고 하더라도 그 스택들을 하나씩 뽑아서 오름차순을 만들 수 없습니다 !

 

[5],[4],[3],[2,1]처럼 수가 들어간 경우 4번째 스택에서는 1이 먼저 나오고 2가 나오기 때문에 이미 내림차순 형태가 되어버립니다.

 

★ 구현하는 과정에서 for ~ else 구문을 사용하였습니다. 만약 for문이 break에 걸리지 않고 정상적으로 종료된 경우 else문을 실행하게 되는데, 이중 for문 안에 else는 만약 해당 수가 스택 어디에서 들어갈 수 없다면 오름차순을 만들 수 없기에 'NO'를 출력하고 for문을 종료합니다.  첫 반복문의 else는 만약 반복문이 'NO'로 종료되지 않았다면 모든 수가 stack에 들어갔고, 이 수들을 오름차순 정렬할 수 있기에 'YES"를 출력합니다. 

 

★ 한가지 팁은 스택을 각각 따로 만드는 것이 아니라 하나의 리스트 안에 만드는 것입니다. 결국 스택을 돌면서, 조건에 맞춰 수들을 넣어줘야 하는데 스택을 각각 따로 만들면 이 과정이 많이 번거롭기 때문입니다 ! 그렇기에 하나의 리스트 안에 만들어 반복문을 돌며 ( for j in range(4) ) 확인해주는 것이 유용합니다 :)

반응형