-
Java 1253 좋다PS 2023. 9. 11. 22:24
https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
투포인터로 해결할 수 있는 문제였다.
원소의 배열을 정렬한 뒤 0을 left, n-1을 right로 잡은 뒤 둘의 합이 해당 원소보다 크다면 right - 1, 작다면 left +1을 하여 값을 찾아주는데 여기서 주의할 점은 문제에서 언급되어있듯이 어떤 수가 다른 수 두개의 합이로 나타내어야 하는 조건이 있기에 left, right가 비교하고자 하는 원소와 값이 같은지 다른지 체크를 해주어야한다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 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 = 0; for(int i = 0; i < n; i++){ int left = 0; int right = n-1; while(true){ if(i == left){ left++; } if(i == right){ right--; } if(left >= right){ break; } if(arr[left] + arr[right] > arr[i]){ right--; }else if(arr[left] + arr[right] < arr[i]){ left++; }else { result++; break; } } } System.out.println(result); } }
'PS' 카테고리의 다른 글
SWEA 1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) 2023.11.18 SWEA 1206. [S/W 문제해결 기본] 1일차 - View (0) 2023.11.16 Java 1654 랜선 자르기 (0) 2023.08.29 Java 11967 불켜기 (0) 2023.08.25 Java 1655 가운데를 말해요 (0) 2023.08.25