๋ฌธ์
N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด ๊ทธ ์๋ฅผ “์ข๋ค(GOOD)”๊ณ ํ๋ค.
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ค์์ ์ข์ ์์ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ผ.
์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค.
ํ์ด
์ฒ์์ ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฃผ์ด์ง ์ซ์๋ค์ for๋ฌธ 3์ค์ผ๋ก ๋๋ฉด์ ๋ ์์ ํฉ์ผ๋ก ํํํ ์ ์๋ ์ง ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ ๋ ฅ์ด ํฌ์ง ์์์ ๊ฐ๋ฅํ ๊ฒ์ด๋ผ ์๊ฐํ์๊ณ ํด๋น ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฐพ์ผ๋ ค๋ ์ซ์๋ณด๋ค ์์ ์๋ค๋ง ๊ณ ๋ คํ๋ฉด ๋๋ค๊ณ ์๊ฐํ์๋ค. ํ์ง๋ง ๋ฌธ์ ์์ ์์๊น์ง ๋ฒ์์ ๋ค์ด๊ฐ๋ฏ๋ก target์ด ๋ ์๋ณด๋ค ํฐ ์์ ์์๊ฐ ๋ํด์ ธ์ target์ธ ์๋ฅผ ๋ง๋ค ์๋ ์๋ค.
๋ฐ๋ผ์ ์ด์ฐจํผ ์ ๋ ฅ์ด 10^3 ๋ฐ์ ๋์ง ์์ผ๋ ์ฃผ์ด์ง ์ซ์๋ค ์ค 2๊ฐ์ฉ ๊ณจ๋ผ์ ๋ํ ํฉ์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค๋ณด๋ฉด
- ๊ฐ์ ์ซ์ 2๊ฐ๋ฅผ ๋ํ๋ฉด ์๋๋ค.
- ๋ณธ์ธ์ ์ ์ธํ ๋ค๋ฅธ ์์ ํฉ์ผ๋ก ํํํด์ผ ํ๋ค.
๋ ์กฐ๊ฑด์ด ๊ฑธ๋ฆฐ๋ค. 1๋ฒ์ for(int i=0; ...){ for(int j= i+1; ...) }
๋ก ๊ตฌ์ฑํจ์ผ๋ก์จ i, j๊ฐ ๊ฒน์น์ง ์๊ฒ ๋ง๋ค๋ฉด ์ฝ๊ฒ ํด๊ฒฐ๋๋ค.
2๋ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒ์์๋ 0๊ณผ ๋ํด์ง๋ ์๋ ์ ์ธํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค. ํ์ง๋ง ์ด๋ฌ๋ฉด 1 0 1
์ด๋ผ๋ ์
๋ ฅ์์ ๋ฌธ์ ๊ฐ ๋๋ค. index 0์ 1์ ๋ง๋ค๊ธฐ ์ํด 0๊ณผ index2์ 1์ด ๋ํด์ง ์ ์๋๋ฐ, 0์ด ๋ํด์ง๋ค๋ ์ด์ ๋ง์ผ๋ก ์ ์ธํ๊ฒ ๋๋ฉด ํด๋น ์
๋ ฅ์์์ ๊ฒฐ๊ณผ ๊ฐ์ 0์ด ๋๋ฏ๋ก ํ๋ฆฐ๋ค.
๊ฒฐ๊ตญ ์ฃผ์ด์ง ์ซ์๋ค(numbers) ์ค ํน์ ์ซ์(numbers[i])๊ฐ ๋ ์์ ํฉ์ผ๋ก ํํ๋๋ ์ง ๋ณด๋ ค๋ฉด, ๊ธฐ์กด์ ์ ์ฅํด๋ ํฉ ๋ชจ์(sum) ๋ฟ๋ง ์๋๋ผ ์ซ์๋ฅผ ๋ง๋ ์์ ์ค i๋ฒ์งธ ์ซ์๊ฐ ์๋ ์ง๊น์ง ํ์ ํด์ผ ํ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋จ์ํ๊ฒ ์๊ฐํ๋ฉด sum์ ์ซ์๋ฅผ ๋ง๋ ์์๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ ์์ผ๋ก ํด๊ฒฐํ ์ ์์ง๋ง ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
ํด๊ฒฐ์ฑ
์ ๋ค์๊ณผ ๊ฐ๋ค. ์ฒ์ numbers ๋ค์ ๋ฐ์ ๋ sum์ ๋ฏธ๋ฆฌ i๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ด๋๋ฉด ๋๋ค. 1 0 1
์ ๊ฒฝ์ฐ 1์ด index 0๊ณผ 2์์ ๋ํ๋ฌ๊ธฐ ๋๋ฌธ์ sum[1] = 0
๋ ๋๊ณ sum[1] = 2
๋ ๋๋ค. ํ์์ ๊ฒฝ์ฐ๋ก ์งํ๋์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋์ค์ index 0์ 1์ ๋ง๋๋ ๋ค๋ฅธ ๋ ์๋ฅผ ๊ตฌํ ๋, index 2๊ฐ sum[1]์ ๋ฑ๋ก๋์ด์์ผ๋ฏ๋ก ๋ง๋ค ์ ์๋ค. ํ์ง๋ง index 0์ด sum[1]์ ๋ฑ๋ก๋์ด์์ง ์์ผ๋ฏ๋ก index 0๊ณผ index 1์ ์กฐํฉ์ผ๋ก ํด๋น ์ซ์๋ฅผ ๋ง๋ค ์ ์์ผ๋ ์ข์ ์๋ก ํ๋ช
๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์๊ฐ ์ฌ๋ฌ ๊ฐ ์๋๋ผ๋ ํ๋์ index๋ง ๋ฑ๋ก๋์ด์์ผ๋ฉด ์ ๋๋ก ๋ต์ด ๊ตฌํด์ง๋ค.
ํ ์คํธ ์ผ์ด์ค
3
0 0 0
// ๋ต : 3
3
1 0 1
// ๋ต : 2
์ฝ๋
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
// ์์ ์ ์๋ ๊ฐ๋ฅ
int N; cin >> N;
vector<int> numbers;
map<int, pair<bool, int>> sum; // ํฉ, ์ข์ ์ ์ฌ๋ถ, ์๊ธฐ์์ ์ idx (idx๊ฐ ๋ ๊ฐ ์ด์์ด๋ฉด ์ด์ฐจํผ ํ๋๋ ๋ค์ด๊ฐ๊ฒ ๋์ด์์)
// ์ข์ ์ ์ฌ๋ถ๋ฅผ ์ ์ฅํด๋์ผ find๋ฅผ ์ ์ฐ๊ณ ์๊ฐ์ ์ ์ฝํ ์ ์์
for (int i = 0; i < N; i++) {
int tmp; cin >> tmp;
numbers.push_back(tmp);
sum[tmp] = { false, i };
}
if (numbers.size() < 3) {
cout << 0;
return 0;
}
for (int i = 0; i < numbers.size(); i++) { // ๊ฐ์ ์ 2๊ฐ ์ ์ธ
for (int j = i + 1; j < numbers.size(); j++) {
int total = numbers[i] + numbers[j];
if (!sum.count(total)) continue; // ์์ผ๋ฉด ํ๋ ธ์ต๋๋ค. => ์ด๋ฏธ ์์ผ๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ๊ธฐ
if ((sum[total].second == i) || (sum[total].second == j)) continue; // ์๊ธฐ ์์ ์ ์ธ
mine[total].first = true;
}
}
int result = 0;
for (int i = 0; i < numbers.size(); i++) {
if (sum[numbers[i]].first) {
result++;
}
}
cout << result << '\n';
}
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 7579 :: ์ฑ (0) | 2021.10.10 |
---|---|
[c++] BOJ 1501 :: ์์ด ์ฝ๊ธฐ (0) | 2021.10.07 |
[c++] BOJ 4195 :: ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |
[c++] BOJ 5430 :: AC (0) | 2021.09.07 |
[c++] BOJ 14725 :: ๊ฐ๋ฏธ๊ตด (0) | 2021.09.07 |
Comment