728x90
반응형

문제

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

예제 입력 1

5 20 10 35 30 7

예제 출력 1

7 35

 

내가 작성한 코드 (C++ 성공)

#include <iostream>

using namespace std;

int main(){
	
	int n;
	cin>>n;
	
	int num[n+1];
	int min = 1000000;
	int max = -1000000;
	
	for(int i=0; i<n; i++){
		cin >> num[i];
		if(min > num[i]){
			min = num[i];
		}
		if(max < num[i]){
			max = num[i];
		}
	}
	
	cout << min << " " << max << "\n";
	
	return 0;
}

 

정리

부끄럽지만 한번 틀렸던 문제다 ㅎㅎ
그냥 간단하게 반복문을 통해서 최솟값과 최댓값만 구하면 되는 문제겠지하고 풀었는데
틀려서 당황했다. 그 때 틀렸던 코드는 아래에 있다.

#include <iostream>

using namespace std;

int main(){
	
	int n;
	cin>>n;
	
	int num[n+1];
	int min = 1000000;
	int max = 0;     // 틀린 이유
	
	for(int i=0; i<n; i++){
		cin >> num[i];
		if(min < num[i]){  // 복잡한 조건문 사용
			min = min;
		} else {
			min = num[i];
		}
		if(max > num[i]){
			max = max;
		} else {
			max = num[i];
		}
	}
	
	cout << min << " " << max << "\n";
	
	return 0;
}

이때 틀린 이유는 문제에 나와있다.

모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

정수의 크기가 음수인 경우도 있었는데 이때 최댓값의 초기값을 0으로 잡은 바람에 틀렸다.

그리고 조건문이 너무 복잡하게 되어있다.
간단하게 최댓값만 갱신시켜주면 되는 문제였는데 else 까지 사용해서
복잡하게 되어서 수정을 통해 정답을 맞출 수 있었다.

728x90
반응형
복사했습니다!