본문 바로가기
알고리즘/백준

[파이썬][백준21318] 피아노 체조

by kastori 2022. 1. 13.
반응형

문제링크

 

문제

 

문제풀이

 x, y의 구간에서 주어진 난이도(arr) arr[i] > arr[i+1] 개수를 찾는 문제.
모든 주어진 질문을 완전 탐색으로 하면 시간초과가 났습니다. 구간을 검색해봤던 곳을 또 검색하는 경우가 있을 거라고 생각해서 누적합을 이용하면 된다고 생각했다. 난이도 배열을 한번 돌면서 전 난이도랑 비교하고 누적합을 더해주었다

 따라서, dp[y] - dp[x]가 정답이 된다.

 

파이썬 코드

import sys

"""
피아노 체조
https://www.acmicpc.net/problem/21318
"""
input = sys.stdin.readline

N = int(input())

arr = list(map(int, input().split()))
arr.insert(0, 0)
Q = int(input())
dp = [0] * (N + 1)
answer = ""
for i in range(1, N + 1):
    dp[i] = dp[i - 1]
    if arr[i] < arr[i - 1]:
        dp[i] += 1

for _ in range(Q):
    x, y = map(int, input().split())
    answer += str(dp[y] - dp[x]) + "\n"

print(answer)

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[파이썬][백준] 다각형의 면적  (0) 2022.01.25
백준 14674. 영우는 사기꾼?  (0) 2021.12.25
백준 1863. 스카이라인 쉬운거  (0) 2021.12.24
백준 18116. 로봇 조립  (0) 2021.12.23
백준 1992. 쿼드트리  (0) 2021.12.22

댓글