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 | 31 |
Tags
- MYSQL
- 다익스트라
- level1
- 코딩테스트
- 구현
- N과M
- 다이나믹 프로그래밍
- 수학
- DP
- 딕셔너리
- 가상메모리
- 백준
- 그리디
- programmers
- 가상메모리 관리
- level2
- 프로그래머스
- dfs
- 운영체제
- BFS
- dict
- 힙
- BOJ
- 브루트포스
- 스택
- python
- 파이썬
- level3
- level0
- 재귀
Archives
- Today
- Total
동캄의 코딩도장
백준 2493 [탑] 파이썬 본문
https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
# 백준 2493 오답
import sys
input = sys.stdin.readline
n = int(input())
lst = list(map(int, input().split()))
dp = [0]*(n)
for i in range(n):
for j in range(i+1, n):
if lst[i] < lst[j]:
break
elif lst[i] == lst[j]:
dp[j] = (i+1)
break
else:
dp[j] = (i+1)
print(*dp)
맨 처음에는 단순한 반복문 구현으로 O(N^2)의 시간 복잡도로 해결하려고 하였다. --> 시간초과
# 백준 2493
import sys
input = sys.stdin.readline
n = int(input())
lst = list(map(int, input().split()))
answer = [0]*(n)
stack = []
for i in range(len(lst)):
if not stack:
stack.append([lst[i], i, 0])
else:
if stack[-1][0] <= lst[i]:
while stack and stack[-1][0] <= lst[i]:
val = stack.pop()
answer[val[1]] = val[2]
if stack:
stack.append([lst[i], i, stack[-1][1]+1])
else:
stack.append([lst[i], i, 0])
while stack:
val = stack.pop()
answer[val[1]] = val[2]
print(*answer)
잘 풀리지 않아 문제의 알고리즘이 스택인 것을 파악하고, 스택으로 문제를 해결하였다.
'코테 > BOJ' 카테고리의 다른 글
백준 1018 [체스판 다시 칠하기] 파이썬 (0) | 2022.02.12 |
---|---|
백준 2231 [분해합] 파이썬 (0) | 2022.02.12 |
백준 2467 [용액] 파이썬 (0) | 2022.02.12 |
백준 2166 [다각형의 면적] 파이썬 (0) | 2022.02.12 |
백준 12852 [1로 만들기 2] (0) | 2022.02.11 |