본문 바로가기
Algorithm/백준

[백준] 1037번 : 약수 / c++

by 코딩친구 2020. 5. 19.
반응형

https://www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되�

www.acmicpc.net

 

[방법 1]

 

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    
    int n;
    vector <int> a;
    
    
    cin >> n;
    
    for(int i=0; i<n; i++){
        int tmp = 0;
        cin >> tmp;
        a.push_back(tmp);
    }
    
    sort(a.begin(),a.end());
    
    cout << a[0]*a[n-1] <<endl;
 
    
}

 

 

처음에는 sort함수를 써서 오름차순 정리로 제일 작은 수와 큰 수를 찾아내면 되는 부분을

if문을 써서

 

for(int i=0; i<n; i++){
        if(min>a[i])
            min = a[i];
        if(max<a[i])
            max = a[i];
    }

 

이런 식으로 표기했는데 별로 효율적이지 않은 방법이었다.

sort문의 활용을 좀 더 폭 넓게 사용하도록 연습해야한다.

 

 

 

[방법 2]

 

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;


int main() {
    int N;
    cin >> N ;
    
    int *Num = new int[N];
    
    for(int i=0;i<N;i++){
        cin >> Num[i];
    }
    
    sort(Num,Num+N);
    
    cout << Num[0]*Num[N-1];

}

 

포인터를 이용해 푸니 더 간단해졌다.

c언어를 언어 배우고 초반에만 쓰고 그 뒤로 안쓰다가 알고리즘 풀이 때문에 다시 c++로 넘어왔는데,

포인터를 다시 익히고 가는 계기가 되겠다.

 

 

반응형