목차
- 문제
- 내가 푼 방법
- 자바 코드
- 결과 및 회고
1. 문제
https://www.acmicpc.net/problem/20366
2. 내가 푼 방법
처음 시도한 방법은 투포인터 안에 투포인터를 시도했는데, 유사했으나 포인터를 이동하는 부분에서 통과할 수 없던 풀이였다. 따라서 통과한 풀이는 이중 for문을 통해 구간을 정하고, 그 안쪽 구간에서 투포인터를 돌리는 방법으로 해결했다.
- 바깥쪽 구간 : i ~ j
- 안쪽 구간 : innerStart ~ innerEnd
int result = Integer.MAX_VALUE;
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
int innerStart = i+1;
int innerEnd = j-1;
int outerSize = arr[i] + arr[j];
while (innerStart < innerEnd) {
int innerSize = arr[innerStart] + arr[innerEnd];
result = Math.min(result, Math.abs(outerSize - innerSize));
if (outerSize > innerSize) {
innerStart++;
}
else if (outerSize < innerSize) {
innerEnd--;
}
else break;
}
if (result == 0) break;
}
if (result == 0) break;
}
3. 자바 코드
깃허브 풀이 주소
https://github.com/geujeog/BOJ/blob/main/B20366.java
import java.util.*;
import java.io.*;
class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int result = Integer.MAX_VALUE;
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
int innerStart = i+1;
int innerEnd = j-1;
int outerSize = arr[i] + arr[j];
while (innerStart < innerEnd) {
int innerSize = arr[innerStart] + arr[innerEnd];
result = Math.min(result, Math.abs(outerSize - innerSize));
if (outerSize > innerSize) {
innerStart++;
}
else if (outerSize < innerSize) {
innerEnd--;
}
else break;
}
if (result == 0) break;
}
if (result == 0) break;
}
bw.write(result+"");
br.close();
bw.flush();
bw.close();
}
}
4. 결과 및 회고
오래 붙잡은 문제였는데, 조금 더 빨리 푸는 연습을 하자.
'문제풀이 > 백준' 카테고리의 다른 글
[JAVA] BOJ 백준 1707번 - 이분 그래프 (0) | 2023.05.16 |
---|---|
[JAVA] BOJ 백준 2660번 - 회장뽑기 (0) | 2023.05.16 |
[JAVA] BOJ 백준 2461번 - 대표 선수 (1) | 2023.05.13 |
[JAVA] BOJ 백준 22862번 - 가장 긴 짝수 연속한 부분 수열 (large) (0) | 2023.05.13 |
[JAVA] BOJ 백준 13144번 - List of Unique Numbers (0) | 2023.05.12 |
댓글