๋ฌธ์
ํ์ด
๊ฐ ๋ฐฐ์ด์ ๋ถ๋ถํฉ์ ์ ๋ถ ๊ตฌํ๋ค.
List<Long> sumsA = new ArrayList<>();
n = Integer.parseInt(br.readLine());
A = Arrays.stream(br.readLine().split(" ")).mapToLong(Long::valueOf).toArray();
for (int i = 0; i < n; i++) {
long res = 0;
for (int j = i; j < n; j++) {
res += A[j];
sumsA.add(res);
}
}
๊ฐ ๋ฐฐ์ด์ ์ต๋ ์์ ๊ฐ์๋ 1000๊ฐ์ด๋ฏ๋ก ์ด์ค ํฌ๋ฌธ์ ์ฌ์ฉํด๋ ์๊ฐ๋ณต์ก๋์ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ์์์ ์ ์ ์๋ค.
๊ทธ๋ ๊ฒ, ๋ฐฐ์ด A์ ๋ฐฐ์ด B์ ๋ถ๋ถํฉ์ ๋ค ๊ตฌํ ๋ฐฐ์ด์ ์ ๋ ฌํ ๋ค ํฌ ํฌ์ธํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
int T;
int n;
int m;
long[] A;
long[] B;
List<Long> sumsA = new ArrayList<>();
List<Long> sumsB = new ArrayList<>();
public static void main(String[] args) throws IOException {
new Main().sol();
}
private void sol() throws IOException {
setUp();
Collections.sort(sumsA);
Collections.sort(sumsB);
long cnt = 0;
int left = 0, right = sumsB.size() - 1;
while (left <= sumsA.size()-1 && right >= 0) {
long sum = sumsA.get(left) + sumsB.get(right);
if (sum < T) {
left++;
} else if (sum > T) {
right--;
} else {
long cntOfL = 1;
long cntOfR = 1;
while (left + 1 <= sumsA.size() - 1 && sumsA.get(left).equals(sumsA.get(left + 1))) {
cntOfL++;
left++;
}
while (right - 1 >= 0 && sumsB.get(right).equals(sumsB.get(right - 1))) {
cntOfR++;
right--;
}
cnt += cntOfL * cntOfR;
left++;
right--;
}
}
System.out.println(cnt);
}
private void setUp() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
n = Integer.parseInt(br.readLine());
A = Arrays.stream(br.readLine().split(" ")).mapToLong(Long::valueOf).toArray();
m = Integer.parseInt(br.readLine());
B = Arrays.stream(br.readLine().split(" ")).mapToLong(Long::valueOf).toArray();
for (int i = 0; i < n; i++) {
long res = 0;
for (int j = i; j < n; j++) {
res += A[j];
sumsA.add(res);
}
}
for (int i = 0; i < m; i++) {
long res = 0;
for (int j = i; j < m; j++) {
res += B[j];
sumsB.add(res);
}
}
}
}
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฃผ์ํด์ผ ํ ์ ์ด ์์๋ค.
while (left + 1 <= sumsA.size() - 1 && sumsA.get(left) == sumsA.get(left + 1)) {
cntOfL++;
left++;
}
while (right - 1 >= 0 && sumsB.get(right) == sumsB.get(right - 1)) {
cntOfR++;
right--;
}
์ฒ์์๋ ์ ์ฝ๋ ์ฒ๋ผ whlie ์กฐ๊ฑด๋ฌธ์ equals() ๊ฐ ์๋ == ๋น๊ต๋ฅผ ํ์๊ณ
ํต๊ณผ๊ฐ ๋์ง ์์๋ค.
List<> ๋ Wrapper ํ์ ์ผ๋ก ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ == ๋น๊ต๊ฐ ์ฑ๋ฆฝํ์ง ์๋๋ค๋ ์ ์ ๊ฐ๊ณผํ๋ค.
์์ ๋ก ๋์จ ํ ์คํธ ์ผ์ด์ค๋ ํต๊ณผํด์ ๋์น๋ฅผ ๋ชป์ฑ๋ ๊ฒ์ด๋ค.
chatGPT์ ๋ฐ๋ฅด๋ฉด ์์ ๊ฐ์ ๊ฒฝ์ฐ Wrapper ํ์ ์ด๋ผ๋ ๊ฐ์ ๊ณต์ ํด์ == ๋น๊ต๋ true๋ฅผ ๋ฐํํ๊ณ ๊ฐ์ด ์ปค์ง๋ฉด false๋ฅผ ๋ฐํํ๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์, ์ปฌ๋ ์ ์์ get() ํด์ ๋ณ์๋ก ํ ๋นํ๊ณ ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ฉด
์ปฌ๋ ์ ์์์ ์์ ๋น๊ต๋ ๊ผญ equals()๋ฅผ ์ฐ๋๋ก ์ฃผ์ํด์ผํจ์ ์ ์ ์๋ ๋ฌธ์ ์๋ค.