https://www.acmicpc.net/problem/17390
17390번: 이건 꼭 풀어야 해!
[2, 5, 1, 4, 3]을 비내림차순으로 정렬하면 [1, 2, 3, 4, 5]이다.
www.acmicpc.net
| 1 초 | 512 MB | 3773 | 1750 | 1502 | 48.499% |
문제
숭실골 높은 언덕 깊은 골짜기에 출제로 고통 받는 욱제가 살고 있다!
욱제는 또 출제를 해야 해서 단단히 화가 났다. 그래서 욱제는 길이 N짜리 수열 A를 만들고, A를 비내림차순으로 정렬해서 수열 B를 만들어 버렸다!! 여기서 B를 출력하기만 하면 문제가 너무 쉬우니까 하나만 더 하자. 아래와 같은 질문이 무려 Q개나 주어진다!! (ㅎㅎ;; ㅈㅅ.. ㅋㅋ!!)
- L R: BL + BL+1 + ... + BR-1 + BR 을 출력한다.
Figure 1. 모든 참가자가 문제를 풀 수 있을 것이라고 기대하는 욱제의 표정
욱제의 질문에 답하고 함께 엠티를 떠나자!!
입력
첫 번째 줄에 수열 A의 길이 N과 질문의 개수 Q가 공백으로 구분되어 주어진다. (1 ≤ N, Q ≤ 300,000)
두 번째 줄에 N개의 정수 A1, A2, ..., AN 이 공백으로 구분되어 주어진다. Ai 는 수열 A의 i 번째 수이다. (1 ≤ Ai ≤ 1,000)
세 번째 줄부터 Q개의 줄에 걸쳐 욱제의 질문을 의미하는 두 수 L, R이 공백으로 구분되어 주어진다. (1 ≤ L ≤ R ≤ N)
주어지는 모든 입력은 자연수이다.
출력
Q개의 줄에 걸쳐, 질문의 답을 순서대로 각각 출력한다.

제출 코드
import sys
input = sys.stdin.readline
N, Q = map(int, input().split())
arr = sorted(map(int, input().split()))
dp = [0] * (N+1)
for i in range(1, N+1):
dp[i] = dp[i-1] + arr[i-1]
# print(dp)
for i in range(Q):
L, R = map(int, input().split())
print(dp[R]-dp[L-1])
dp에 익숙해지는 중~
누적합을 어떻게 푸는지 이제 알았다. 누적합 문제에선 인덱스에 주의할 필요가 있을 것 같다.
좋은 로직의 문제를 내줘서 감사한마음~
'알고리즘 > 백준' 카테고리의 다른 글
| [BOJ#1063] 킹 (0) | 2024.04.24 |
|---|---|
| [BOJ#1026] 보물 (0) | 2024.04.23 |
| [BOJ#3187] 양치기 꿍 (0) | 2024.04.21 |
| [BOJ#9625] BABBA (0) | 2024.04.18 |
| [BOJ#6198] 옥상 정원 꾸미기 (1) | 2024.04.17 |