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