Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 크로스핏
- 1781
- BOJ14889
- 4811
- 동적프로그래밍
- 스택
- 1로만들기2
- 15662
- DP
- dart
- 회전하는큐
- sw expert academy
- Flutter
- 브루트포스
- 15353
- BOJ
- C++
- 삼성
- spring boot
- 재귀
- D1
- Python
- 서울에서경산까지
- 14863
- 그리디
- Crossfit
- 백준
- 26008
- 재귀함수
- 해시해킹
Archives
- Today
- Total
곧죽어도 콛잉
[BOJ 25556 / Python] 포스택 본문
https://www.acmicpc.net/problem/25556
25556번: 포스택
포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다.
www.acmicpc.net
오랜만에 올리는 포스팅 ㅎㅎ
블로그 쉬지 않고 열심히 올려보자아~
위 문제는 직접 손으로 그려보면서 "되는 경우"를 찾는게 매우 쉽다.
규칙은 딱 2가지다.
1) 4개의 stack 중 한개라도 비어있지 않은 상황일때, 비어있지 않은 그 stack의 top보다 지금 넣으려는 숫자가 반드시 커야한다.
2) 만약 넣으려는 숫자가 작다면, 반드시 비어있는 stack에 넣어야한다.
3) 만약 비어있는 stack이 존재하지 않는다면, 그 배열은 청소가 불가능하다.
# -*- coding: utf-8 -*-
import sys
input = sys.stdin.readline
def sol(nums):
stack1 = []
stack2 = []
stack3 = []
stack4 = []
stacks = [stack1, stack2, stack3, stack4]
for n in nums:
check = True
for i in stacks:
if i and i[-1] < n : # stack이 비어있지 않고 해당 top보다 지금 넣으려는 값(n)이 더 크다면,
i.append(n) # n을 추가함
check=False
break
if not i : # 만약 해당 stack이 비어있으면
i.append(n)
check=False
break
if check:
return False # 여기에 도달하면 위의 조건에도 성립되지 않으므로 종료시킴.
return True
n = int(input())
arr = list(map(int, input().rstrip().split()))
if sol(nums=arr) :
print("YES")
else :
print("NO")
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스 / Python] 나누어 떨어지는 숫자 배열 (0) | 2024.02.21 |
---|---|
[BOJ 10818 / Python] 최소, 최대 (0) | 2024.02.21 |
[프로그래머스 / Python] 기능개발 (0) | 2024.02.20 |
[BOJ 1021 / Python] 회전하는 큐 (0) | 2024.02.20 |
[프로그래머스 / Python] 같은 숫자는 싫어 (0) | 2024.02.19 |
Comments