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
- Unity
- Algorithm
- Unreal Engine 5
- 기초
- Basic
- python
- 문제풀이
- parameter
- 프로그래밍
- loop
- Tutorial
- Programming
- 파이썬
- dynamic
- Material
- 재귀
- DP
- 오류
- 시작해요 언리얼 2022
- C#
- String
- UE5
- guide
- c++
- dfs
- 백준
- w3school
- github
- W3Schools
- Class
Archives
- Today
- Total
행복한 개구리
백준 22.04.02. 1874번 - 스택 수열 본문
- 우선 문제를 이해하기 조금 힘들었는데 제가 이해한 바가 맞다면 아래와 같습니다.
- 1부터 n까지 증가하는 수열이 주어집니다.
- 이 수열이 진행되는 과정에서 pop과 push를 실행하여 빈 리스트에 pop한 값을 저장하여 입력받은 수열을 만드는 것입니다.
- 예제 1번입력값을 예로 든다면
- 1~4까지는 주어진 만들어야할 수열의 0인덱스인 4와 일치하지 않으므로 push를 4번하고
- 4번째 push를 한 이후엔 만들어야할 수열과 일치하는 값이 나왔으므로 pop
- 그 다음 수인 3도 일치하므로 pop
- 2는 일치하지않으므로 일치하는 수인 6이 나올때까지 push하는 방식입니다.
def push(r, l, k):
r.append("+")
l.append(k)
def pop(r, l):
if len(l) < 1:
return
r.append("-")
l.pop(-1)
n = int(input())
stack = []
result = []
count = 0
t = True
for i in range(n):
num = int(input())
while count < num:
count += 1
push(result, stack, count)
if stack[-1] == num:
pop(result, stack)
else:
t = False
break
if t == False:
print("NO")
else:
for i in result:
print(i)
- 우선 스택의 기능을 수월하게 하기위해 push와 pop을 함수로 만들어 사용했습니다.
- 다만 +인지 -인지 저장하기위해 result메서드를 사용하기 위해 매개변수 r을하나 더 할당해주었습니다.
- 입력받은 값과 일치하지 않을 때, 증가하는 수열의 값을 저장할 stack과 +-결과를 저장할 result, 증가하는 수열의 값인 count, 예외로 스택을 만들 수 없을 때를 알아내기 위하여 가능/불가능 여부를 저장할 t를 생성하여 사용합니다.
- 입력받은 수와 수열의 수가 같아질 때까지 stack에 push해줍니다.
- 이후에 스택의 마지막 수가 입력받은 수와 같다면 pop을 해줍니다.
- 스택의 마지막 수가 입력받은 수와 같지 않다면 불가능한 수열이므로 t를 False로 바꿔줍니다.
- t의 값에 따라 다르게 출력해주면 됩니다.
'Algorithm > BaekJoon' 카테고리의 다른 글
백준 22.04.07. 18258번 - 큐 2 (0) | 2022.04.07 |
---|---|
백준 22.04.07. 17298번 - 오큰수 (0) | 2022.04.07 |
백준 22.04.02. 4949번 - 균형잡힌 세상 (0) | 2022.04.02 |
백준 22.04.02. 9012번 - 괄호 (0) | 2022.04.02 |
백준 22.04.02. 1966번 - 프린터 큐 (0) | 2022.04.02 |