슈콩

[BOJ] 백준 3151 합이 0 본문

Algorithms/Baekjoon

[BOJ] 백준 3151 합이 0

shukong 2025. 10. 6. 15:41

 

[문제]

https://www.acmicpc.net/problem/3151

 

 

[소스 코드]

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int n = Integer.parseInt(br.readLine());
		int[] arr = new int[n];
		st = new StringTokenizer(br.readLine());
		for(int i=0;i<n;i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(arr);
		long cnt = 0;
		for(int i=0;i<n;i++) {
			int start = i+1;
			int end = n-1;
			while(start<end) {
				int val = arr[i] + arr[start] + arr[end];
				if(val==0) {
					if(arr[start]==arr[end]) {
						int len = end - start + 1;
						cnt += len * (len-1) / 2 ;
						break;
					}
					int startCnt = 1;
					int endCnt = 1;
					while(start+1<end && arr[start]==arr[start+1]) {
						start++;
						startCnt++;
					}
					while(end-1>start && arr[end]==arr[end-1]) {
						end--;
						endCnt++;
					}
					cnt += startCnt * endCnt;
					start++;
					end--;
				}
				else if(val>0) end--;
				else if(val<0) start++;
			}
		}
		System.out.println(cnt);
	}
}

'Algorithms > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2003 수들의 합 2  (0) 2025.11.11
[BOJ] 백준 21921 블로그  (0) 2025.11.11
[BOJ] 백준 2805 나무 자르기  (0) 2025.10.06
[BOJ] 백준 9935 문자열 폭발  (0) 2025.10.04
[BOJ] 백준 28215 대피소  (0) 2025.10.04