๋ฌธ์
ํ์ด
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ด์ฉํ์ฌ ์ฃผ์ด์ง ์ซ์์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ฐ๋ผ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ 3๊ฐ์ง์๋ค.
1. ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ๋ ์๋ฅผ ์ ํ(์กฐํฉ์ ์ด์ฉํด์)ํ๋ ๋ฐฉ๋ฒ
2. ์ ํํ ๋ ์๋ฅผ ์ ์ฅ ๋ฐ ์ต๋๊ณต์ฝ์ ์ฐ์ฐ ํจ์์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ
3. ํญ์ ํฐ์๋ฅผ ์์ ์๋ก ๋๋๊ฒ ์ซ์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ
๋ฌด์ํ๊ฒ ์ผ๋จ ๊ตฌํํด๋ณด์!๋ ๋ง์ผ๋ก ๋ค๋ณ๋๋ ๋ฐ๋ณต๋ฌธ๊ณผ ๋ฒกํฐ๋ฅผ ์ข ๋ง์ด ์ผ๋ค... (์์ธ ์ค๋ช ์ ์ฃผ์ ์ฐธ์กฐ...)
์ธํฐ๋ท์ ์ฐพ์๋ณด๋ ๋๋ฌด๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์๋ค... ๊ทผ๋ฐ ๋ ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์...ใ
๊ทธ๋ฆฌ๊ณ ์์์๋ฅผ ํฐ์๋ก ๋๋ ๋ ๋๋๊ตฌ๋....? ์๊ทธ๋ฐ์ง.... ์์๋ ๋ถ์ ๋๊ธ plz ใ
-> ํด๊ฒฐ์๋ฃ(๋งจ์๋ ์ฒจ๋ถ)
์ฝ๋1 (๋งค์ฐ ๋ฌด์)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void SelectTwoNum(vector<int> num_vector);//์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ธฐ์ํด ๋ ์๋ฅผ ์ ํํ๋ ํจ์
int CalculateGCD(int a, int b);//๋๋จธ์ง๋ฅผ ๊ตฌํด์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ํจ์
//๋ด๋ฆผ์ฐจ์์ ์ํ ์กฐ๊ฑด๋ฌธ ํจ์
bool lower(int a, int b) {
return (a > b);
}
int main() {
int test_case = 0, num_count = 0, num = 0;//ํ
์คํธ ์ผ์ด์ค ์, ํ ์ค๋น ์
๋ ฅ๋ฐ๋ ์, ํ ์ค์ ์
๋ ฅ๋๋ ์ซ์๋ค(๋ฒกํฐ์ ๋ฃ์ผ๋ ค๊ตฌ)
vector<int> num_vector;//ํ ์ค์ ์
๋ ฅ๋ ์ซ์๋ค์ ๋ด์ ๋ฒกํฐ
cin >> test_case;
for (int i = 0; i < test_case; i++) {
cin >> num_count;
for (int j = 0; j < num_count; j++) {
cin >> num;
num_vector.push_back(num);
}
if (num_count >= 2) {//ํ ์ค์ ์
๋ ฅ๋ ์๊ฐ 2 ์ด์์ด๋ฉด ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ฌ ๊ฐ. 1๊ฐ ์ด๋ฉด ๊ทธ ์๊ฐ ๊ณง ์ต๋๊ณต์ฝ์.
sort(num_vector.begin(), num_vector.end(), lower);//ํญ์ ํฐ์๋ฅผ ์์ ์๋ก ๋๋๊ฒ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํจ.
SelectTwoNum(num_vector);//๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํด์ 2๊ฐ์ ์ซ์๋ฅผ ๋ฝ์ผ๋ฌ ๊ฐ์.
num_vector.clear();//์ซ์๋ฅผ ๋ค์ ๋ฐ์์ผ ํ๋ฏ๋ก num_vector ์ด๊ธฐํ
}
else cout << num_vector.front() << "\n";
}
return 0;
}
void SelectTwoNum(vector<int> num_vector) {
vector<int> check_vector;//0๊ณผ 1์ ์ด์ฉํด์ 2์๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๊ธฐ ์ํ ๋ฒกํฐ
vector<int> selected_num;//์ ํ๋ ๋ ์๋ฅผ ๋ด์ ๋ฒกํฐ
long long sum = 0;
for (int i = 0; i < 2; i++) { check_vector.push_back(1); }//1์ 2๊ฐ ๋ฃ์ด์ฃผ๊ณ (์ ํ๋ ์ธ๋ฑ์ค ํ์)
for (int i = 0; i < num_vector.size() - 2; i++) { check_vector.push_back(0); }//๋๋จธ์ง๋ 0์ผ๋ก.(์ ํ ์๋ ์ธ๋ฑ์ค ํ์)
sort(check_vector.begin(), check_vector.end());//์์ ์๋ถํฐ ์์ด์ ๊ตฌํด์ผ ํ๋ฏ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ. ์ค๊ฐ์ ๋น๋ ๊ฒฝ์ฐ ์์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด.
do {
for (int i = 0; i < num_vector.size(); i++) {
if (check_vector[i]){//์ ํ๋ ์ธ๋ฑ์ค๋ฉด selected_num์ ์ถ๊ฐํด์ค.
selected_num.push_back(num_vector[i]);
if (selected_num.size() > 1) {//์ ํ๋ ์๊ฐ 2๊ฐ๋ฉด ์ต๋๊ณต์ฝ์ ๊ตฌํ๋ฌ ๋ ๋๊ธฐ.
sum += CalculateGCD(selected_num.front(), selected_num.back());//๊ตฌํ ํฉ๋ค์ ์ ์ฅ
selected_num.clear();//์ซ์๋ฅผ ๋ค์ ์ ํํด์ผ ํ๋ฏ๋ก selected_num๋ฒกํฐ clear.
break;
}
}
}
} while (next_permutation(check_vector.begin(), check_vector.end()));//๋ค์ 2์๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ์ ์๊ฐ ์๋์ง ํ์ธ. ์์ผ๋ฉด ๋ฐ๋ณต๋ฌธ ๊ณ์ ์งํ.
cout << sum << "\n";
}
int CalculateGCD(int a, int b) {//์ต๋ ๊ณต์ฝ์
if (a%b == 0) {
return b;
}
return CalculateGCD(b, a%b);//์ ํด๋ฆฌ๋ ํธ์ ๋ฒ GCD(a, b) = GCD(b, a%b)์์ ์ด์ฉ
}
์ฝ๋2(์ฐธ๋ ์ ๋ต)
#include <iostream>
#include <vector>
using namespace std;
int CalculateGCD(int a, int b);
int main() {
int test_case, num_count, num;
cin >> test_case;
while (test_case--) {
vector<int> num_vector;
cin >> num_count;
for (int i = 0; i < num_count; i++) {
cin >> num;
num_vector.push_back(num);
}
long long sum = 0;
for (int i = 0; i < num_count; i++) {
for (int j = i+1; j < num_count; j++) {
sum += CalculateGCD(num_vector[i], num_vector[j]);
}
}
cout << sum << "\n";
num_vector.clear();
}
return 0;
}
int CalculateGCD(int a, int b) {
if (a%b == 0) {//์ ์์์๋ฅผ ํฐ์๋ก ๋๋ ๋ ๊ด์ฐฎ์๊ฑธ๊น...
return b;
}
return CalculateGCD(b, a%b);
}
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ๋๋ฌด ์ค๋๋ง์ ํ์๋๋ ๊ฐ์ด ๋ค ์ฃฝ์ด๋ฐ... ๋ค์ ๋์ด์ฌ๋ฆฌ์ ! I believe in me!
2022.04.02 ์คํ ์ ๋ฐ์ดํธ
๋๋ฒ์งธ ํ์ด์ CalculateGCDํจ์์์ a%b ๋ฅผ ํ ๋, a>b์ ์กฐ๊ฑด์ ํ์ธํ๋ ๋ถ๋ถ์ด ์์ด์ ๋ง์ฝ a<b์ ๊ฒฝ์ฐ, ์ ์์์๋ฅผ ํฐ์๋ก ๋๋ ๋ ๊ด์ฐฎ์๊ฑธ๊น... ๋ผ๋ ์๊ฐ์ ํ์๋๋ฐ, ์ด์ฐจํผ ๋๋์ด์ง์ง ์๋ ๊ฐ์ด๋ผ ๊ทธ๋๋ก a๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ ํ๋ฒ ๋ ์คํํ๊ฒ ๋๋ฏ๋ก ๊ด์ฐฎ์๊ฑฐ ์๋ค.
์๋ฅผ ๋ค์ด, GCD(4, 8)์ ๊ฒฝ์ฐ GCD(a,b) == GCD(b, a%b)์ด๋ฏ๋ก GCD(8, 4%8)๊ฐ ๋ ํ ๋ฐ 4๋ 8๋ก ๋๋์ด์ง์ง ์์ผ๋ฏ๋ก ๋ชซ์ด 0์ด๊ณ ๋๋จธ์ง๊ฐ 4๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ GCD(8, 4) ์ด ๊ฐ์ด ๋ค์ ๋์ค๋ฏ๋ก GCD(4, 0)์ด ๋์ด ์ต๋๊ณต์ฝ์ 4๋ฅผ ๋์ถํ ์ ์๋ ๊ฒ์ด์๋ฐ~!!!
๊ณตํ์ํ2๊น์ง ํ๋๋ฐ, ์ํ ๋ค๊น๋จน์์ฃ ~? ํ์ด๋ต์ด๋คใ ใ ...