문제
https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
import java.util.Arrays;
import java.util.Scanner;
public class Main1253 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int [N];
boolean[] visited = new boolean[N];
for (int i=0; i<N; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int cnt = 0;
for (int i = 0; i<N; i++) {
int si = 0;
int ei = N-1;
while (si < ei) {
if (arr[si] + arr[ei] == arr[i]) {
if (si != i && ei != i) {
cnt++;
break;
} else if (si == i) {
si++;
} else {
ei--;
}
} else if (arr[si] + arr[ei] < arr[i]) {
si++;
} else {
ei--;
}
}
}
System.out.println(cnt);
}
}
1. 문제이해를 잘못해서 양수만 생각하고 로직을 구성했다. 그렇게 헤매다 결국 절대값인것을 확인하고 다시 로직을 짰다.
2. 투포인터를 활용한다. 다만 음수가 있기때문에 si(startIndex), ei(endIndex)의 값이 i와 같을 수 있는 반례를 예상해야 한다. 그 외엔 딱히 어려운 부분은 없다.
정리 : 골드치고 어려운 문제는 아니지만 위에 설명한 반례를 생각 못한다면 쉽게 풀 수 없었을 문제다. 항상 문제를 꼼꼼히 읽는 습관을 길들이자.
'백준' 카테고리의 다른 글
백준 11003번 자바 ☆ (0) | 2023.01.02 |
---|---|
백준 12891번 자바 (0) | 2022.12.31 |
백준 1940번 자바 (0) | 2022.12.29 |
백준 2018번 자바 (2) | 2022.12.29 |
백준 10986번 자바 ☆ (0) | 2022.12.28 |