- ๋ฐฑ์ค
- ์นด์นด์ค ์ฝํ
- ์ฌ๊ท
- ๋ค์ต์คํธ๋ผ
- C++
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ์์ฝ๋
- Union-Find
- ์น๋ฆฐ์ด
- ํธ๋ฆฌ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ์ด๋ถํ์
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- Python
- nestjs
- golang
- ์นด์นด์ค2021
- ํ๋ก๊ทธ๋๋จธ์ค
- BFS
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- js
- ์ํฐ๋
- go
- DFS
- ๋นํธ๋ง์คํน
- LCs
- ์๊ณ ๋ฆฌ์ฆ
- ๋นํธ๋งต
- DP
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 1253. ์ข๋ค ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/1253
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;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 12757. ์ ์ค์ JBNU (0) | 2021.10.06 |
---|---|
[๋ฐฑ์ค/C++] 4195. ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |
[C++/๋ฐฑ์ค] 22352. ํญ์ฒด ์ธ์ (0) | 2021.09.14 |
[๋ฐฑ์ค/C++] 14725. ๊ฐ๋ฏธ๊ตด (0) | 2021.09.07 |
[๋ฐฑ์ค/C++] 17370. ์ก๊ฐํ ์ฐ๋ฆฌ ์์ ๊ฐ๋ฏธ (0) | 2021.08.24 |