๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ4 - ๋์ ํฉ (Lv. Sliver3)
1. ๋ฌธ์
2. ํ์ด
1. ๋ฌธ์
https://www.acmicpc.net/problem/11659
2. ํ์ด
- ์ฝ๋ ํด์ค
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
arr = new int[N+1];
for (int i = 1; i <= N; i++) {
arr[i] = arr[i-1] + Integer.parseInt(st.nextToken());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(arr[b] - arr[a-1]);
}
}
}
N+1๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๋ฉด ๋ชจ๋ ์์๊ฐ 0์ผ๋ก ์ด๊ธฐํ ๋ฉ๋๋ค.
๋์ ํฉ์ ๊ณ์ฐํ ๋ arr[0]์ 0์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์ด๊ธฐํํ์ง ์๊ณ arr[1]๋ถํฐ ์ฌ์ฉํ ์ ์ ์ต๋๋ค.
arr[i] = arr[i-1] + Integer.parseInt(st.nextToken()); ์ฝ๋๊ฐ ์คํ๋๊ณ 5 4 3 2 1๋ฅผ ์ ๋ ฅํ๋ค๋ฉด
i | arr[i] |
0 | 0 |
1 | 5 |
2 | 9 |
3 | 12 |
4 | 14 |
5 | 15 |
์์ ๊ฐ์ด ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
๊ทธ ๋ค์์ a๊ตฌ๊ฐ๊ณผ b๊ตฌ๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐ์์ b์ธ๋ฑ์ค ๊ฐ๊น์ง์ ํฉ์์ a์ธ๋ฑ์ค ๊ฐ๊น์ง์ ํฉ์ ๋นผ์ฃผ๋ฉด a์ b ๊ตฌ๊ฐ์ ํฉ์ ๊ตฌํ ์ ์์ต๋๋ค.
arr[b]๋ 1๋ถํฐ b๊น์ง์ ํฉ์ด๊ธฐ ๋๋ฌธ์ 1๋ถํฐ a-1๊น์ง์ ํฉ์ ๋นผ๋ฉด a์ b ๊ตฌ๊ฐ์ ํฉ๋ง ๋จ๊ฒ ๋ฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ ํด์ค
์ฝ๋ ํด์ค์์์ ์ฝ๋๋ 1576ms๊ฐ ๊ฑธ๋ ธ์ต๋๋ค. ์ฌ๊ธฐ์์ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ์ถ๋ ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์์ต๋๋ค.
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
arr = new int[N+1];
for (int i = 1; i <= N; i++) {
arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(arr[b] - arr[a - 1]).append("\n");
}
System.out.print(sb.toString());
}
}
์์ ์ฝ๋๋ 536ms๊ฐ ๊ฑธ๋ ธ์ต๋๋ค. ๊ธฐ์กด ์ฝ๋์์๋ ์ถ๋ ฅ์ ๋ฐ๋ณต ํธ์ถํ์ฌ ์ถ๋ ฅ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ์ต๋๋ค. StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ๋ฌธ์์ด์ ํ ๋ฒ์ ์ถ๋ ฅํ๋ฉด์ I/O ์ฑ๋ฅ์ ๊ฐ์ ํ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก 66%์ ์ฑ๋ฅ ํฅ์์ ํ์ธํ ์ ์์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ !
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค <3
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ต๋จ๊ฒฝ๋ก - ๋ค์ต์คํธ๋ผ (Lv. Gold4) (0) | 2025.02.13 |
---|---|
[Java] ํผ๋ณด๋์น ์ - Bottom-Up/Top-Down (Lv. 2) (1) | 2025.02.11 |
[Java] ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ - ๋ฐฑํธ๋ํน (Lv. Sliver2) (0) | 2025.02.10 |
[SQL] ์ํ ๋ณ ์คํ๋ผ์ธ ๋งค์ถ ๊ตฌํ๊ธฐ - INNER JOIN (Lv. 2) (0) | 2025.02.08 |
[Sort] ์ ๋ ฌ (0) | 2025.02.03 |