Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_21318] 피아노 체조 본문

Study/Problem Solving

[BOJ_21318] 피아노 체조

monitor 2024. 4. 29. 22:18

설명


최대 N,Q가 100000인 건으로 일일이 다 체크하면 무조건 시간 초과가 나는 문제였습니다. 따라서, 누적합을 활용하여 문제를 풀었습니다. for N문으로 한 번에 누적된 케이스들의 값을 계속 끌고 가면서 그 사이에 위치한 사이 값이면 해당 누적합의 차이 만큼 빼서 사이에 얼마나 다음 케이스가 큰 케이스인지 체크해 푼 문제 입니다.

 

코드


package BOJ.prefix_sum;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class BOJ_21318 {
    public static void main(String[] args) throws Exception{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(in.readLine());

        List<Integer> melody = new ArrayList<Integer>();
        StringTokenizer tk = new StringTokenizer(in.readLine()," ");

        for (int i = 0; i < N; i++){
            melody.add(Integer.parseInt(tk.nextToken()));
        }

        int Q = Integer.parseInt(in.readLine());

        int[] sum = new int[N];

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < N - 1; i++){
            if(melody.get(i) > melody.get(i + 1)){
                sum[i + 1] = sum[i] + 1;
            }else{
                sum[i + 1] = sum[i];
            }
        }

        while (Q-- > 0) {
            tk = new StringTokenizer(in.readLine(), " ");

            int x = Integer.parseInt(tk.nextToken()) - 1;
            int y = Integer.parseInt(tk.nextToken()) - 1;
            sb.append(sum[y] - sum[x] + "\n");
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }
}

https://www.acmicpc.net/problem/21318

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_1749] 점수따먹기  (0) 2024.05.12
[BOJ_17123] 배열 놀이  (0) 2024.05.06
[BOJ_20438] 출석 체크  (0) 2024.04.28
[BOJ_11000] 강의실 배정  (0) 2024.04.07
[BOJ_20365] 블로그2  (0) 2024.04.04