Notice
Recent Posts
Recent Comments
Link
HwangHub
[누적합 / python] 백준 21318. 피아노 체조 본문
https://www.acmicpc.net/problem/21318
21318번: 피아노 체조
피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를
www.acmicpc.net
문제 해석
해당 문제는 구간을 주고, 그 구간 내에서 특정 조건을 만족하는 경우를 '세어' 달라고 했다. 만약 일반적인 경우처럼 크게 입력값을 받는 loop로 묶고, 그 안에서 입력받은 것에 따라 x부터 y까지 슬라이싱을 하고, 슬라이싱한 배열을 sum 함수로 돌린다면 시간복잡도가 O(Q*N*(y-x))이다.
최악의 경우 이미 0.5초를 훌쩍 넘겨 버리므로, 다른 방안을 고려해야 한다. 마침 "구간"이라는 힌트와 "세어"달라는 힌트가 존재한다. 누적합을 이용한다면 위 문제를 쉽게 풀 수 있을 것이다.
문제 풀이
import sys
input = sys.stdin.readline
t = int(input())
li = list(map(int, input().split()))
res = [0] * t
for i in range(len(li)-1):
if li[i+1] < li[i]:
res[i]=1
prefix_sum = [0] * (t+1)
for i in range(1,t+1):
prefix_sum[i] = prefix_sum[i-1] + res[i-1]
for _ in range(int(input())):
i, j = map(int, input().split())
print(prefix_sum[j-1] - prefix_sum[i-1])
'workspace > 알고리즘' 카테고리의 다른 글
[연결리스트 / python] 백준 11866. 요세푸스 문제 0 (0) | 2023.04.06 |
---|---|
[스택 / python] 백준 17298. 오큰수 (0) | 2023.04.06 |
[이분탐색 / python] 백준 2805. 나무 자르기 (0) | 2023.04.01 |
[이분탐색 / python] 백준 1920. 수 찾기 (0) | 2023.04.01 |
[이분탐색 / python] 13423. Three Dots (0) | 2023.03.31 |
Comments