알고리즘/백준

[백준/C] 10818번: 최소, 최대

이우열 2022. 6. 20. 23:33
728x90

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

 

10818번: 최소, 최대

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

www.acmicpc.net


 

 


 

문제 분석

정렬의 문제로 보여진다. 하지만 정렬로 푸는 방법과 배열을 한 번 돌면서 최소와 최대를 골라내는 방법의 시간 차이가 조금 있었기 때문에 최소와 최대를 각각 구하는 방법으로 풀었다.

 

코드 진행 방향

n개의 배열을 생성한 뒤 배열을 차례로 입력받고 첫 번째로 입력받은 배열의 수를 max, min에 넣어준다.

그 후 배열의 수가 max보다 크면 max를 바꾸어주고 min보다 작으면 min을 바꾸어주며 배열의 수만큼 반복한다.

 


 

코드

첫 번째 방법 - min, max 바꾸어가며 구하기

더보기
#include <stdio.h>
int main(){
    int n, max, min;
    scanf("%d", &n);
    
    int arr[num];
    for(int i=0; i<n; i++){
    	scanf("%d", &arr[i]);
	}
	
	max = arr[0];
	min = arr[0];
	
	for(int j=0; j<n; j++){
		if(max < arr[j])
			max = arr[j];
		else if(min > arr[j])
			min = arr[j];
	}
	
	printf("%d %d", min, max);
}

 

두 번째 방법 - 정렬 후 첫 번째와 마지막 배열의 수 뽑기

더보기
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b){
	return *(int *)a>*(int *)b?1:(*(int *)a<*(int *)b?-1:0);
}

int main(){
	int num;
	scanf("%d", &num);
	
	int arr[num];
	for(int i=0; i<num; i++){
		scanf("%d", &arr[i]);
	}
	
	qsort(arr, num, sizeof(int), compare);
	
	printf("%d %d", arr[0], arr[num-1]);
}
728x90