알고리즘&자료구조/문제

[BOJ] 1253 좋다 C++

Nakuri 2023. 2. 23. 12:37
728x90

개요

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

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

골드4 난이도 문제다.

풀이

투 포인터를 이용하면 간단하게 풀 수 있다.

N <= 2000 이므로 배열을 정렬 후 하나하나 투 포인터로 구해주더라도 O(2000^2)로 시간 내에 연산 가능하다.

 

코드

#include<iostream>
#include<algorithm>
using namespace std;
constexpr int LIMIT = 2002;

int N;
int A[LIMIT];
int ans;

void TwoPointers()
{
	int front;
	int back;
	int sum;
	for (int i = 0; i < N; i++)
	{
		front = 0;
		back = N - 1;
		while (front < back)
		{
			if (front == i)
			{
				front++;
				continue;
			}
			else if (back == i)
			{
				back--;
				continue;
			}

			sum = A[front] + A[back];
			
			if (A[i] == sum)
			{
				ans++;
				break;
			}
			else if (A[i] > sum) front++;
			else if (A[i] < sum) back--;
		}
	}
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);

	cin >> N;

	for (int i = 0; i < N; i++)
		cin >> A[i];

	sort(A, A + N);

	TwoPointers();

	cout << ans;
}

'알고리즘&자료구조 > 문제' 카테고리의 다른 글

[BOJ] 3190 뱀 C++  (0) 2023.02.23
[BOJ] 9024 두 수의 합 C++  (0) 2023.02.23
[BOJ] 7453 합이 0인 네 정수 C++  (0) 2023.02.23
[BOJ] 2473 세 용액 C++  (0) 2023.02.23
[BOJ] 2467 용액 C++  (0) 2023.02.20