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 |
Tags
- Spring multimodule
- 항해99
- 커스텀 헤더
- 파이썬
- spring batch 5.0
- Python
- JavaScript
- 취업리부트코스
- 99클럽
- 빈 조회 2개 이상
- 개발자 취업
- 코딩테스트 준비
- 프로그래머스
- 개발자부트캠프추천
- jwttoken
- 디자인 패턴
- 디자인패턴
- jwt
- 1주일회고
- 단기개발자코스
- KPT회고
- 전략패턴 #StrategyPattern #디자인패턴
- 빈 충돌
- infcon 2024
- 인프콘 2024
- DesignPattern
- 프로그래머스 이중우선순위큐
- @FeignClient
- 구글 OAuth login
- TiL
Archives
- Today
- Total
m1ndy5's coding blog
[자료구조] 백준 2493번 탑 with Python 본문
https://www.acmicpc.net/problem/2493
사실 아이디어는 바로 떠올랐지만 당연히 시간초과가 나는 코드란 걸 알았기에 무슨 방법이 있는지 고민을 해보았다.
키포인트는 중간에 우뚝 솟은 탑이 있다면 그 앞은 고려할 필요가 없다는 것이다.
하지만 그 뒤는 고려를 해줘야하는게 높이가 1 4 3 2 인 탑이 있다면 2은 4에 걸리는 것이 아니라 3에 걸리기 때문이다.
따라서 오른쪽부터 훑으면서 앞쪽의 탑들이 자신보다 낮으면 스택에서 빼고 높다면 그 탑이 자신이 발사하는 레이저에 걸리는 탑이 된다.(break)
그리고 자신도 그 뒤쪽 탑에겐 높을 수 있으므로 자신도 stack에 push 해야한다.
만약 앞쪽 탑들이 다 빠지고 자신밖에 스택에 없다면 자신보다 높은 탑이 없으므로 0을 append 해준다.
import sys
n = int(sys.stdin.readline().rstrip())
towers = list(map(int, sys.stdin.readline().rstrip().split()))
stack = [0]
answer = [0]
for i in range(1, len(towers)):
for j in range(len(stack)-1, -1, -1):
if towers[stack[j]] < towers[i]:
stack.pop()
else:
break
stack.append(i)
if len(stack) == 1:
answer.append(0)
else:
answer.append(stack[-2]+1)
for i in answer:
print(i, end=' ')
'알고리즘 with python > 자료구조' 카테고리의 다른 글
[자료구조] 백준 10799번 쇠막대기 with Python (0) | 2023.03.22 |
---|---|
[자료구조]백준 1874번 스택 수열 with Python (0) | 2023.03.22 |
[자료구조] 백준 1406번 에디터 with Python (0) | 2023.03.22 |
[자료구조] 백준 1935번 후위 표기식2 with python (0) | 2023.03.22 |
[자료구조] 백준 10773번 제로 with python (0) | 2023.03.22 |