IT 프로그래밍/백준

[C++] 백준 10818 최소, 최대

기술1 2024. 3. 16. 21:17
반응형

 

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

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

풀이


#include <iostream>
#include <vector>

int main()
{
	using namespace std;
	
	int n;
	cin >> n;

	vector<int>data(n);

	for (int i = 0; i < n; i++)
	{
		cin >> data[i];
	}

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

	cout << min << " " << max << endl;

	return 0;
}

최소 최대 같은 경우 for문을 하면서 min max를 채우는 방식으로 진행을 했습니다. 물론 오름차순 정열을 한 다음에 앞쪽값과 끝값을 구해도 됩니다. 혹은 algorithm에 있는 min() max() 함수로 풀어도 되겠죠.

 

저는 먼저 vector를 통해 배열을 만들어준 다음 cin으로 data를 받아줬습니다. 그리고 그 다음 최소값 최대값 변수를 만들어주면서 for문과 if문을 사용해서 배열에서의 최대값과 최소값을 찾아냈습니다. 

 

저기서 data[0]을 기본으로 두는 것은 만약에 0으로 초기화를 했을 때 0보다 큰 값이 min이 될 경우에는 오류가 발생하므로 그렇습니다. 

 

사실 문제를 맞췄지만 메모리 시간이 오래 걸리는 단점이 있어서 다른 풀이를 찾아봤습니다.

다른 풀이


#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int array[1000001];
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> array[i];
	}

	sort(array, array + n);

	cout << array[0] << " " << array[n - 1];

	return 0;
}

일단 배열의 크기를 큰 값으로 정해놓은 다음 진행을 했습니다. 기본적인 부분은 저와 같지만 sort() 함수를 사용해서 오름차순을 사용한 것을 볼 수 있습니다.

sort(begin, end);

이런 식으로 쓰이는 sort는 오름차순을 해주는 함수입니다. 

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 백준 2562 최댓값  (0) 2024.03.16
[C++] 1546 평균  (0) 2024.03.16
백준 10807 개수 세기  (0) 2024.03.16
[C++] 25304 영수증  (0) 2024.03.15
[C++] 8393 합  (0) 2024.03.15