[백준]1253번 좋다

김윤지·2022년 9월 28일
0

JAVA

목록 보기
4/10

문제 설명:
내가 숫자를 입력하면, 1부터 입력한 숫자를 하나씩 더하면서
더한 결과가 입력한 숫자가 나오는 숫자들의 합을 구하기!

백준은 문제가 참 짜증나게 나온다.
나만 그런가?

처음에는 for문을 2개 돌리면 되지 않을까, 했는데 생각보다 잘 안됨
책을 보니깐, 이 문제는 공식이 있다.

투 포인터 알고리즘!

  • A[i] + A[j] > K: j--; A[i] + A[j] < K: i++;
  • A[i] + A[j] == K: i++; j--; count++;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class GoodNum {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());
		long[] A = new long[N];

		StringTokenizer st = new StringTokenizer(br.readLine());

		// 배열 넣기
		for (int i = 0; i < N; i++) {
			A[i] = Long.parseLong(st.nextToken());
		}
		Arrays.sort(A);

		int count = 0;
		for(int k=0; k<N; k++) {
			long find = A[k];
			int i = 0;
			int j = N-1;
			// 투 포인터 알고리즘
			while(i<j) {
				if (A[i] + A[j] == find) {
					// find는 서로 다른 두 수의 합이어야 함을 체크
					if (i!=k && j!=k) {
						count++;
						break;
					} else if (i==k) {
						i++;
					} else if (j==k) {
						j--;
					}
				} else if (A[i] + A[j] < find) {
					i++;
				} else {
					j--;
				}
			}
		}
		System.out.println(count);
		br.close();
	}
}

for문 대신 while문을 사용했다!


정답~

더 자세한 설명은 집 가서 적어야징..

profile
Java, Javascript, python, DB

0개의 댓글