알고리즘/BOJ문제풀이

185번째 문제 - 9417 최대 gcd

quantdave 2016. 11. 24. 00:39

#include <iostream>

#include <string>

#include <algorithm>

#include <vector>


using namespace std;


int gcd(int a, int b) {


int z;

int x = a;

int y = b;


while (true) {


z = x %y;

if (0 == z)

break;


x = y;

y = z;


}

return y;

}


int main() {

string s;

vector<int> nums;

int C,max;


cin >> C;

  getline(cin, s);

while (C--) 

{

getline(cin, s);

int num = 0;

for (int i = 0; i < s.length(); i++) 

{

if (s[i] == ' ') {

nums.push_back(num);

num = 0;

}

else {

num = num * 10 + (s[i] - '0');

}

}

nums.push_back(num);


//for (int i = 0; i < nums.size(); i++) cout << nums[i] << " ";


for (int i = 0; i < nums.size(); i++)

{

for (int j = i + 1; j < nums.size(); j++)

{

int g = gcd(nums[i], nums[j]);

if (g > max) max = g;

}

}

cout << max << endl;

nums.clear();

max = 0;

}

}



미니 대회 때 급하게 푼다고 코드가 지저분함의 끝을 달린다. 문자를 한글자씩 돌면서 숫자변환을 하고 ..

모든 쌍에 대해서 직접 gcd를 실행 해 보는데 잘 생각은 안나지만 더 효율적인 방법이 있을듯

하지만 문제에서 주어진 case 수가 워낙 적어서 저어언혀 문제 없다.