코딩테스트/BOJ

[BOJ] 17390 이건 꼭 풀어야 해! - JAVA

5월._. 2023. 4. 25.
728x90

1. 문제

 

17390번: 이건 꼭 풀어야 해!

[2, 5, 1, 4, 3]을 비내림차순으로 정렬하면 [1, 2, 3, 4, 5]이다.

www.acmicpc.net

숭실골 높은 언덕 깊은 골짜기에 출제로 고통 받는 욱제가 살고 있다!

욱제는 또 출제를 해야 해서 단단히 화가 났다. 그래서 욱제는 길이 N짜리 수열 A를 만들고, A를 비내림차순으로 정렬해서 수열 B를 만들어 버렸다!! 여기서 B를 출력하기만 하면 문제가 너무 쉬우니까 하나만 더 하자. 아래와 같은 질문이 무려 Q개나 주어진다!! (ㅎㅎ;; ㅈㅅ.. ㅋㅋ!!)

L R: BL + BL+1 + ... + BR-1 + BR 을 출력한다.


2. 풀이

1.  입력으로 받은 arr을 정렬한다.

2.  누적합시킨다.

3.  인덱스가 작은 것부터 큰 순서대로 입력받기때문에 -arr[처음 입력받은 인덱스-1]+arr[두번째 인덱스] 연산을 해야한다. 변수를 따로 저장해서 가독성 좋게 만들어도 좋지만 이 문제는 간단해서 이렇게 풀었다.

import java.io.*;
import java.util.*;

public class BOJ_17390_이건꼭풀어야해 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      int N = Integer.parseInt(st.nextToken());
      int Q = Integer.parseInt(st.nextToken());
      int[] arr = new int[N+1];
      st = new StringTokenizer(in.readLine());
      for(int i=1;i<=N;i++) arr[i] = Integer.parseInt(st.nextToken());
      Arrays.sort(arr);

      for(int i=2;i<=N;i++) arr[i] += arr[i-1];

      StringBuilder sb = new StringBuilder();
      for(int q=0;q<Q;q++){
         st = new StringTokenizer(in.readLine());
         sb.append(-arr[Integer.parseInt(st.nextToken())-1]+arr[Integer.parseInt(st.nextToken())]).append('\n');
      }

      System.out.print(sb);
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2485 가로수 - JAVA  (0) 2023.04.27
[BOJ] 6236 용돈 관리 - JAVA  (0) 2023.04.26
[BOJ] 2015 수들의 합 4 - JAVA  (0) 2023.04.24
[BOJ] 5014 스타트링크 - JAVA  (1) 2023.04.23
[BOJ] 10025 게으른 백곰 - JAVA  (0) 2023.04.22

댓글