Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 1253. ์ข‹๋‹ค ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 1253. ์ข‹๋‹ค

bba_dda 2021. 9. 28. 19:58
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

1253๋ฒˆ: ์ข‹๋‹ค

์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 2,000), ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Ai๊ฐ€ N๊ฐœ ์ฃผ์–ด์ง„๋‹ค. (|Ai| ≤ 1,000,000,000, Ai๋Š” ์ •์ˆ˜)

www.acmicpc.net

N๊ฐœ์˜ ์ˆ˜ ์ค‘์—์„œ ์–ด๋–ค ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ˆ˜ ๋‘ ๊ฐœ์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ ์ˆ˜๋ฅผ “์ข‹๋‹ค(GOOD)”๊ณ  ํ•œ๋‹ค.

N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ทธ ์ค‘์—์„œ ์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•˜๋ผ.

์ˆ˜์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ’์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ์ˆ˜์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 2,000), ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Ai๊ฐ€ N๊ฐœ ์ฃผ์–ด์ง„๋‹ค. (|Ai| ≤ 1,000,000,000, Ai๋Š” ์ •์ˆ˜)

์ถœ๋ ฅ

์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 

10

1 2 3 4 5 6 7 8 9 10

์˜ˆ์ œ ์ถœ๋ ฅ 

8

ํ’€์ด

1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

2. idxs<์ˆซ์ž, ์ธ๋ฑ์Šค>, counts<์ˆซ์ž, ๋“ฑ์žฅ ํšŸ์ˆ˜>, isGood<์ˆซ์ž, ์ข‹์€์ˆซ์ž ์—ฌ๋ถ€> map์„ ๋งŒ๋“ ๋‹ค. 

- counts : ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋“ฑ์žฅํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด

- isGood : ํ•œ ๋ฒˆ ์ข‹์€์ˆซ์ž๊ฐ€ ๋œ ์ดํ›„๋กœ ์ค‘๋ณต์œผ๋กœ ์„ธ์–ด์ฃผ์ง€ ์•Š๊ธฐ ์œ„ํ•ด

3. ์ด์ค‘ํฌ๋ฌธ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ ๋‘ ์ˆ˜์˜ ํ•ฉ(temp)์„ ๊ตฌํ•œ๋‹ค.

3-1. ๋‘ ์ˆ˜์˜ ํ•ฉ์ด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์— ์กด์žฌํ•˜๊ณ , ์ด์ „์— ์ข‹์€์ˆซ์ž๊ฐ€ ๋œ ์ ์ด ์—†์œผ๋ฉด, ์ข‹์€ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ counts[temp] ๋งŒํผ ๋Š˜๋ ค์ค€๋‹ค.

 

- ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์กฐ๊ธˆ์ด๋ผ๋„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ด์ค‘ ํฌ๋ฌธ์„ 0~N, 0~N์œผ๋กœ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  0~N, i~N์œผ๋กœ ๋Œ๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฅผ ์œ„ํ•ด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์คฌ๋Š”๋ฐ, ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š๊ณ  ์ œ์ถœ์„ ํ•ด๋„ ์ •๋‹ต์ด ๋˜์–ด์„œ ์˜์•„ํ–ˆ๋‹ค. 

- ๋ฌธ์ œ์— ๋ช…์‹œ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ์ˆซ์ž๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ž…๋ ฅ๋˜๋Š” ๋ชจ์–‘์ด๋‹ค.

 

์ฝ”๋“œ

#include <map>
#include <vector>
#include <algorithm>
#include <iostream>

#define endl '\n'

using namespace std;

int N;
vector<int> nums;
map<int, int> idxs; // <์ˆซ์ž, ์ธ๋ฑ์Šค>
map<int, int> counts; // <์ˆซ์ž, ๋“ฑ์žฅ ํšŸ์ˆ˜>
map<int, bool> isGood;

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL);
	cin >> N;
	int input;
	for (int n = 0;n < N;n++) {
		cin >> input; nums.push_back(input);
	}
	//sort(nums.begin(), nums.end()); // ??
	for (int n = 0;n < N;n++) {
		idxs[nums[n]] = n;
		counts[nums[n]]++;
		isGood[nums[n]] = 0;
	}
	int result = 0;
	for (int i = 0;i < N;i++) {
		for (int j = i + 1;j < N;j++) {
			int temp = nums[i] + nums[j];
			//nums์—์„œ ์ด ๊ฐ’๊ณผ ๊ฐ™์€๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
			if (idxs.count(temp) && !isGood[temp]) {
				//์ธ๋ฑ์Šค๊ฐ€ ๋‹ค๋ฅธ์ง€ ํ™•์ธ 
				if (idxs[temp] != i && idxs[temp] != j) {
					result += counts[temp];
					isGood[temp] = 1;
				}
			}
		}
	}
	cout << result << endl;
	return 0;
}

 

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•