일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ccw
- 투 포인터
- 유니온 파인드
- 구조론
- union find
- 분할정복
- 윤석열 내란수괴
- dfs
- Python
- 오블완
- BFS
- 내란수괴
- 내란죄
- 왈왈왈
- 알고리즘
- 다익스트라
- 민주주의
- 티스토리챌린지
- dfs 백트래킹
- 비상계엄
- 재귀함수
- 이분 탐색
- Prim
- DP
- 윤석열
- 파비우스 전략
- 프림
- LCA
- 백준
- 내란수괴 윤석열
- Today
- Total
Toolofv 님의 블로그
GPT로 만든 문제- 수열에서 자신보다 작지 않은 수들의 구간 찾기 본문
GPT가 만든 Monotonic Stack 문제 - 수열 A가 주어졌을 때, 각 원소 A[i]를 기준으로 자기보다 작지 않은 수들이 연속된 가장 넓은 구간을 찾으시오.구간은 왼쪽과 오른쪽으로 확장할 수 있으며, A[i]보다 작은 수가 나오면 거기서 멈춰야 합니다.
수열 A가 주어졌을 때, 각 원소 A[i]를 기준으로 자기보다 작지 않은 수들이 연속된 가장 넓은 구간을 찾으시오.구간은 왼쪽과 오른쪽으로 확장할 수 있으며, A[i]보다 작은 수가 나오면 거기서 멈춰야 합니다.
toolofv.tistory.com/287
문제
수열 A가 주어졌을 때, 각 원소 A [ i ]를 기준으로 자기보다 작지 않은 수들이 연속된 가장 넓은 구간을 찾으세요.
구간은 왼쪽과 오른쪽으로 확장할 수 있으며, A [ i ]보다 작은 수가 나오면 거기서 멈춰야 합니다.
입력 & 출력
입력 - [2, 4, 4, 1, 4, 4, 4, 2]
출력 - [3, 2, 2, 8, 3, 3, 3, 4]
관련 포스트
[Python] 백준 - 6549 히스토그램에서 가장 큰 직사각형
백준 - 6549 히스토그램에서 가장 큰 직사각형입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 1
toolofv.tistory.com
[Python] 백준 - 3015 오아시스 재결합
백준 - 3015 오아시스 재결합첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231
toolofv.tistory.com
- 코드
1. Monotonic Stack
import sys
from collections import deque
input = sys.stdin.readline
an = [2, 4, 4, 1, 4, 4, 4, 2]
'''
입력 [2, 4, 4, 1, 4, 4, 4, 2]
출력 [3, 2, 2, 8, 3, 3, 3, 4]
'''
def Mono_left(an):
stack = []
ans = [0 for _ in range(len(an))]
for i in range(len(an)):
while stack and an[stack[-1]] >= an[i]:
stack.pop()
if stack:
lth = i - stack[-1] # 자기 자신 포함
else:
lth = i + 1 # 자기 자신 포함
ans[i] = lth
stack.append(i)
print(ans)
return ans
def Mono_right(an):
stack = []
ans = [0 for _ in range(len(an))]
for i in range(len(an)-1, -1, -1):
while stack and an[stack[-1]] >= an[i]:
stack.pop()
if stack:
lth = stack[-1] - i
else:
lth = len(an) - i
ans[i] = lth
stack.append(i)
print(ans)
return ans
left = Mono_left(an)
right = Mono_right(an)
ans = [0 for _ in range(len(an))]
for i in range(len(an)):
ans[i] = left[i] + right[i] - 1
print(ans)
'Algorithm' 카테고리의 다른 글
[Python] 백준 - 1018 체스판 다시 칠하기 (0) | 2025.07.15 |
---|---|
[Python] 백준 - 12789 도키도키 간식드리미 (3) | 2025.07.01 |
[Python] 퀵 정렬(Quick Sort) (0) | 2025.01.31 |
[Python] 병합 정렬(Merge Sort) (1) | 2025.01.30 |
[Python] 힙 정렬(Heap Sort) (0) | 2025.01.28 |