https://www.acmicpc.net/problem/3273
๋ฌธ์
n๊ฐ์ ์๋ก ๋ค๋ฅธ ์์ ์ ์ a1, a2, ..., an์ผ๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์๋ค. ai์ ๊ฐ์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1000000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ์์ฐ์ x๊ฐ ์ฃผ์ด์ก์ ๋, ai + aj = x (1 ≤ i < j ≤ n)์ ๋ง์กฑํ๋ (ai, aj)์์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด์ ํฌ๊ธฐ n์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ ์์ด์ ํฌํจ๋๋ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค์๋ x๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
์ถ๋ ฅ
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด1 - ์๊ฐ ์ด๊ณผ
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n,x,ans=0;
vector <int> v;
cin >> n;
for(int i=0, tmp; i<n; i++){
cin >> tmp;
v.push_back(tmp);
}
cin >> x;
for(int i=0; i<n; i++){
int tmp = x - v[i];
for(int i=0; i<n; i++){
if(tmp == v[i]) {
ans++;
break;
}
}
}
cout << ans/2; //์ค๋ณต์ ๊ฑฐ
return 0;
}
๋ต์ ๋ง๊ฒ ๋์ค๋ ๊ฒ ๊ฐ์๋ฐ ๋ฒกํฐ๋ฅผ ์ด์ค์ผ๋ก ๋์์ผํด์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ถ์๋ถ์ํ๊ธด ํ๋ค...
์ญ์.. ์์ฃผ ํ๋ คํ๊ฒ ์๊ฐ์ด๊ณผ
ํ์ด2 - ๋ฐํ์์๋ฌ
์ํด.. ๊ทธ๋์ for๋ฌธ(์๊ฐ๋ณต์ก๋ O(n))์ด ์๋ ๊ทธ๋ฅ ๋ฐ๋ก (O(1)) x-์์ ๋ผ๋ ์ซ์๊ฐ ์๋์ง ํ๋จํ ์ ์๋๋ก ์ซ์ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ bool ๋ฐฐ์ด์ ๋ง๋ค์ด์คฌ๋ค.
์ฒ์์๋ int ๋ก ํ๋๋ฐ ์๊พธ OutOfBounds ๊ฐ ๋ ์ ์ ์๋ฐฐ์ด์ 1000000 ์ต๋์ธ๊ฑฐ๋๋ฌธ์ธ๊ฐ ์ถ์ด ์ด์ฌํ ๋ฐ๊พธ๊ณ ์ฝ์งํจ..
#include <iostream>
#include <vector>
using namespace std;
bool a[1000001];
int main() {
int n,x,ans=0;
vector <int> v;
cin >> n;
for(int i=0, tmp; i<n; i++){
cin >> tmp;
a[tmp] = true;
v.push_back(tmp);
}
cin >> x;
for(int i=0; i<n; i++){
int tmp = x - v[i];
if (a[tmp])
ans++;
}
cout << ans/2; //์ค๋ณต์ ๊ฑฐ
return 0;
}
์ ๊ทผ๋ฐ ์๊ณ ๋ณด๋ ์ ํ ๋ค๋ฅธ๊ณณ์์ ๋ฌธ์ ๊ฐ ์๊ธด๊ฑฐ์๋ค
ํ์ด3 - ์ฑ๊ณต
์ ์ฝ๋๋ ๊ทธ๋๋ก ์ฐ๊ณ ์ค๊ฐ์ x-์์ ์ธ tmp ๋ฅผ ๋ฐฐ์ด์ ๋ฃ์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ ํํฐ๋ง์ ํ๋ค
๋ณด๋ฉด ์์๋ 1~1000000 ์ด๊ณ
x๋ 1~2000000์ด๋ค
๊ทธ๋ฌ๋๊น.. x์์ ์์๋ฅผ ๋นผ๋ฉด 2000000-1 ~ 1-1000000 ์ด๋ ๊ฒ ํ๋ํ ๋ฒ์๊ฐ ์๊ธด๋ค
์์๋ ์๊ณ ๋ฐฐ์ดํฌ๊ธฐ ๋์ด์๋ ์ ๋ ์์ผ๋ ๋ฐํ์์๋ฌ๊ฐ 7ํ๋ก๋ถํฐ ๋๋๊ฑฐ์๋ค.. ์์ฃผ ์ผ์ ํ๊ฒ..
์ฒ์์๋ ์์๋ง ์์ธ์ฒ๋ฆฌํ๋๋ฐ ์ฝ์ง๋์ 1000000์ดํ์ tmp๋ ์ฒ๋ฆฌํด์ค
#include <iostream>
#include <vector>
using namespace std;
bool a[1000001];
int main() {
int n,x,ans=0;
vector <int> v;
cin >> n;
for(int i=0, tmp; i<n; i++){
cin >> tmp;
a[tmp] = true;
v.push_back(tmp);
}
cin >> x;
for(int i=0; i<n; i++){
int tmp = x - v[i];
if (tmp > 0 && tmp < 1000001 && a[tmp]) //์ฌ๊ธฐ ์กฐ๊ฑด์ ๋๊ฐ ์ถ๊ฐํ๋ค
ans++;
}
cout << ans/2; //์ค๋ณต์ ๊ฑฐ
return 0;
}
TIL
๋ฌธ์ ๋ฅผ ์ ์ฝ์ ^^
'๐ Baaaaaarking > 0x03๊ฐ - ๋ฐฐ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1919๋ฒ: ์ ๋๊ทธ๋จ ๋ง๋ค๊ธฐ (0) | 2023.05.02 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 113289๋ฒ: Strfry (0) | 2023.04.28 |
[BOJ][C++] ๋ฐฑ์ค 13300๋ฒ: ๋ฐฉ ๋ฐฐ์ (0) | 2023.04.27 |
[BOJ][C++] ๋ฐฑ์ค 1475๋ฒ : ๋ฐฉ ๋ฒํธ (0) | 2021.12.22 |
[BOJ][C++] ๋ฐฑ์ค 10808๋ฒ : ์ํ๋ฒณ ๊ฐ์ (0) | 2021.12.22 |