본문 바로가기
Problem Solving/백준

백준 5624 : 좋은 수

by Libi 2021. 8. 29.
반응형

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

 

5624번: 좋은 수

정수 N개로 이루어진 수열 A가 있다. 이때, i번째 수가 그 앞에 있는 수 세 개의 합으로 나타낼 수 있을 때, 그 수를 좋다고 한다. (같은 위치에 있는 수를 여러 번 더해도 된다) 수열이 주어졌을 때

www.acmicpc.net

[ 문제풀이 ]

"A + B + C = D"를 "A + B = D - C"로 생각하는 것이 포인트인 문제이다.

또한, A + B로 만들 수 있는 수는 -200000~200000이기 때문에 배열을 하나 선언하여 해당 숫자 존재 유무를 빠르게 알 수 있도록 해준다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) {
		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
			int N = Integer.parseInt(br.readLine());
			StringTokenizer st = new StringTokenizer(br.readLine());
			int[] data = new int[N];
			boolean[] visit = new boolean[400002];
			int answer = 0;
			for (int i = 0; i < N; ++i) {
				data[i] = Integer.parseInt(st.nextToken());
				for (int j = 0; j < i; ++j) {
					if (visit[data[i] - data[j] + 200000]) {
						answer++;
						break;
					}
				}
				for (int j = 0; j <= i; ++j) {
					visit[data[i] + data[j] + 200000] = true;
				}
			}
			bw.write(answer + "\n");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

반응형

'Problem Solving > 백준' 카테고리의 다른 글

백준 1029 : 그림 교환  (0) 2021.08.31
백준 2234 : 성곽  (0) 2021.08.30
백준 5214 : 환승  (0) 2021.08.27
백준 1826 : 연료 채우기  (0) 2021.08.26
백준 13308 : 주유소  (0) 2021.08.25

댓글