4번 문제
내가 풀이한 답
보자마자 풀이가 2개 떠올랐다. 하나는 각 입력들은 배열에 담아 sort 함수를 이용해 정렬을 하는 방법이었고 또 하나는 입력된 숫자만큼 순회(for)를 돌면서 최솟값과 최댓값을 업데이트하는 방법이다.
먼저 배열에 담아 sort 함수를 이용해 정렬하는 코드는 다음과 같다. sort 함수를 사용하기 위해서는 표준 템플릿 라이브러리(STL)을 사용해야 하므로 algorithms 라이브러리를 #include 헤더에 포함시켜준다. 그리고 배열을 사람 개수만큼 동적으로 할당해주고 sort 함수를 사용해 배열을 오름차순으로 정렬해준다. 마지막 째 배열 요소와 첫 번째 배열 요소를 빼준 값을 출력해준다. 마지막으로 동적으로 생성한 배열을 해제하기 위해 delete[]를 선언한다.(delete와 delete[]의 차이점은 단일 객체와 배열 객체 각각의 원소의 차이로 소멸자 생성과 메모리 환원을 한다고 대강 알고 있지만 나중에 따로 블로그에 자세히 정리해 보는걸로...)
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
int n;
cin >> n;
int *array = new int[n];
for(int i=0; i<n; i++){
cin >> array[i];
}
sort(array, array+n);
cout << array[n-1] - array[0] << endl;
delete[] array;
return 0;
}
두 번째 방법은 STL을 안쓰는 방법... 순회(for)를 돌면서 최솟값과 최댓값을 업데이트하는 방법이다. 최솟값인 min은 나이를 최대 100살까지로 고려해서 100으로 설정하였고 최댓값인 max는 음수가 아닌 제일 작은 값인 0으로 설정하였다.
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n, a, min=100, max=0;
cin >> n;
for(int i=0; i<n; i++){
cin >> a;
if(a > max) max = a;
if(a < min) min = a;
}
cout << max - min << endl;
return 0;
}
두 방법 모두 통과를 했다.
사이트의 답안
#include<iostream>
using namespace std;
int main(){
int n, i, a, max=-2147000000, min=2147000000;
cin>>n;
for(i=1; i<=n; i++){
cin>>a;
if(a>max) max=a;
if(a<min) min=a;
}
cout<<max-min;
return 0;
}
사이트의 답안은 두 번째 방법과 똑같은 것을 확인할 수 있다.
'알고리즘 & 자료구조 > 기초 다잡기' 카테고리의 다른 글
6. 숫자만 추출 (0) | 2020.09.01 |
---|---|
5. 나이 계산 (0) | 2020.09.01 |
3. 진약수의 합 (0) | 2020.09.01 |
2. A부터 B까지의 자연수의 합 (0) | 2020.09.01 |
1. 1부터 N까지의 수 중 M의 배수 합 (0) | 2020.08.31 |