728x90
문제
작곡가인 GUN은 박자의 빠르기가 변화하는 곡을 쓰는 걸 좋아한다.
혼신의 힘을 다해 곡을 완성한 GUN은 자기가 쓴 곡의 초당 박자 변화량의 합이 얼마나 되는지 궁금해졌다. 하지만 GUN의 노래는 박자가 변화하는 곳이 많아 구간의 변화량 합을 일일이 계산하기 어렵다. GUN은 당신에게 이 곡의 특정 부분들의 구간별 초당 박자 변화량의 합을 구해달라고 요청했다. GUN을 도와 주어진 구간들의 초당 박자 변화량의 합을 구해주자.
단, i 초와 j 초 구간 사이의 초당 박자 변화량의 합은 ∑𝑘=𝑖𝑗−1|𝑎𝑘+1−𝑎𝑘| 라고 정의하고 𝑗−1<𝑖인 경우엔 ∑𝑘=𝑖𝑗−1|𝑎𝑘+1−𝑎𝑘|=0 이다.
그리고 기호 |a|는 임의의 실수 a에 대해 a<0 이면 |a| = -a 이고 a≥0 이면 |a| = a임을 나타내는 기호이다.
입력
입력의 첫 번째 줄에는 GUN이 쓴 노래의 길이 N(1 ≤ N ≤ 1,000) 초와 초당 박자 변화량의 합을 구해야 하는 구간의 수 Q(1 ≤ Q ≤ 1,000)이 공백으로 구분되어 주어진다.
입력의 두 번째 줄에는 순서대로 GUN이 쓴 노래의 박자 빠르기를 나타내는 수열 a1 a2, ... , an 이 공백으로 구분되어 주어지며, ai (-104 ≤ ai ≤ 104)는 i 초일 때 박자의 빠르기라고 한다.
입력의 세 번째 줄부터 Q 줄에 걸쳐 변화량의 합을 구해야 하는 구간의 시작점과 끝점 Q(i,l), Q(i,r) (1 ≤ Q(i,l) ≤ Q(i,r) ≤ N)가 주어진다.
출력
GUN이 쓴 곡의 구간의 초당 박자 변화량의 합을 입력 순서대로 Q 줄에 걸쳐 출력한다.
해결 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int Q = Integer.parseInt(st.nextToken());
int[]a = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
for(int q=0;q<Q;q++){
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken())-1;
int j = Integer.parseInt(st.nextToken())-1;
//j-1<1 인경우는 0 출력
if(j-1< i){
System.out.println(0);
}
//아닌경우는 누적합 실행
else{
int sum = 0;
for(int r=i+1;r<=j;r++){
sum+=Math.abs(a[r]-a[r-1]);
}
System.out.println(sum);
}
}
}
}
실행 결과
팁
- 예외 조건을 잘 생각하자
'알고리즘 문제 풀이 > 해결코드' 카테고리의 다른 글
[백준 - 5966][GOLD 5][해설 X] - Heat Wave (JAVA) (0) | 2024.07.10 |
---|---|
[백준 - 21939][GOLD 4][해설 X] - 문제 추천 시스템 Version 1 (JAVA) (0) | 2024.07.09 |
[백준 - 17014][SILVER 1][해설 X] - Pretty Average Primes (JAVA) (0) | 2024.07.06 |
[백준 - 14715][GOLD 5][해설 X] - 전생했더니 슬라임 연구자였던 건에 대하여 (Easy) (JAVA) (0) | 2024.07.05 |
[백준 - 18353][SILVER 2][해설 X] - 병사 배치하기 (JAVA) (0) | 2024.07.04 |