[ 백준 10818번 ] 최소, 최대

2021. 11. 9. 11:29백준/단계별 문제

백준 10818번 / 5단계 / 최소, 최대

 

백준 10818번 - 최소, 최대

 

처음에는 그냥 배열을 안 쓰고 정수 값 하나 입력받을 때마다 min, max를 결정하는 식으로 짜고 성공을 했다

하고 보니 5단계 테마가 1차원 배열인걸 생각이 나서 배열을 쓰는 방법으로 문제를 풀었다.

배열을 쓰고 정렬을 하는 방법을 채택했다.

 

두 가지 방법의 채점 결과는 다음과 같다

  메모리 시간
배열을 쓰지 않은 문제 1112 KB 180 ms
배열 쓰고 정렬한 문제 5804 KB 512 ms

 

첫 번째 문제 풀이
모든 정수는 -1,000,000 보다 크거나 같고 1,000,000 보다 같거나 작다
이 조건을 만족하기 위해 비교 변수를 선언한다
result_min = 1000001;
result_max = -1000001;

1. 반복문이 n번까지 반복 구조를 만들어준다
2. 반복을 하면서 value 변수에 정수 값을 입력받는다.
3. 입력받은 value와 min, max 함수를 사용해 최솟값과 최댓값을 찾고 반복문이 끝나면 출력을 한다.

 

코드
#include <stdio.h>
#include <algorithm>
#include <math.h>

using namespace std;

int main() {
	int n, i, value;
	int result_min = 1000001;
	int result_max = -1000001;

	scanf("%d", &n);
	for ( i = 0; i < n; i++ ) {
		scanf("%d", &value);
		result_min = min(result_min, value);
		result_max = max(result_max, value);
	}
	printf("%d %d", result_min, result_max);
}

 

두 번째 문제 풀이
STL의 sort 함수를 이용한 문제이다.
정수를 입력받을 배열 1,000,000 개를 생성해준다
정렬할 때 비교가 자동으로 되게 초기화 값은 1,000,001으로 설정해준다.

1. 반복문이 n번까지 반복 구조를 만들어준다 반복을 하면서 만들어둔 배열에 정수를 입력받는다.
2. sort 함수를 이용해 정렬을 해준다. sort함수의 정렬 기본값은 오름차순이다.

입력 값 :
5
20 10 35 30 7

배열 예상모습

7, 10, 20, 30, 35, 1000001, 1000001, 1000001.....
이런 식으로 배열이 정렬이 완료되어서 0번째 인덱스와 n-1(4) 번째 인덱스를 출력해주면 된다.

배열 이미지

Index 0 1 2 3 4 5 6
value 7 10 20 30 35 1000001 1000001

 

코드
#include <iostream>
#include <algorithm>


using namespace std;

int main() {
	int n, i;
	int data[1000000] = {1000001, };

	cin >> n;
	for ( i = 0; i < n; i++ ) {
		cin >> data[i];
	}
	sort(data, data + n);
	cout << data[0] << "\n" << data[n - 1];
}

'백준 > 단계별 문제' 카테고리의 다른 글

[ 백준 3052번 ] 나머지  (0) 2021.11.12
[ 백준 2562번 ] 최댓값  (0) 2021.11.09
[ 백준 10871번 ] 더하기 사이클  (0) 2021.11.08
[ 백준 10871번 ] X보다 작은 수  (0) 2021.11.08
[ 백준 2439번 ] 별찍기 2  (0) 2021.11.08