ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9613 : GCD 합
    코딩문제/백준 2020. 7. 13. 02:44

    이번에는 유클리드 알고리즘을 적용한 재귀함수를 이용해 최대 공약수를 이용하기로 하였다. 

    메인함수내에서 벡터들을 처리하면서, 비효율적으로 처리된것 같긴한데, 이를 어떻게 효율적으로 할진 천천히 생각해봐야겠다.

    처음시도에 gcd 합을 담는 sum을 int형을 사용했는데 오답이라 떠서, 입력 조건을 보니, int범위를 넘을듯싶어 long long int 형으로 좀더 범위가 큰 데이터형을 쓰니 정답처리가 되었다.

     

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int max_num(int a, int b) { //최대공약수
    	if (b == 0) return a;
    	return max_num(b, a%b);
    }
    
    int main() {
    	int n, n2;
    	long long sum=0;
    	vector<int> tmp;
    	vector<long long> sum2;
    	cin >> n;
    	for (int i = 0; i < n; i++) {
    		sum = 0;
    		cin >> n2;
    		for (int j = 0; j < n2; j++) {
    			int num;
    			cin >> num;
    			tmp.push_back(num);
    		}
    		for (int j = 0; j < n2-1; j++) {
    			for (int k = j+1; k < n2; k++) {
    				sum += max_num(tmp[j], tmp[k]);
    			}
    		}
    		sum2.push_back(sum);
    		tmp.clear();
    	}
    	for (int i = 0; i < sum2.size(); i++) {
    		cout << sum2[i] << endl;
    	}
    	return 0;
    }

    '코딩문제 > 백준' 카테고리의 다른 글

    1978 : 소수찾기  (0) 2020.07.13
    1934 : 최소공배수  (0) 2020.07.13
    2798 블랙잭  (0) 2020.07.09
    2748 피보나치수  (0) 2020.07.09

    댓글

Designed by Tistory.