IT 프로그래밍/C++

MAX MIN을 이용한 양의 정수 n개 배열 최대 최소 C++

기술1 2024. 3. 9. 11:12
반응형

존재할 경우 최소값, 아닐 경우 -1이기 때문에 처음에는 if문으로 접근을 했습니다.

 

 

#include <iostream>

using namespace std;

int main()
{
	int N;
	cin >> N;
	int a[N];
	for (int i = 0; i < 10; i++)
		cin >> a[i];

	return 0;
}

처음에 접근한 방식입니다. 이렇게 골머리를 앓았습니다. 하지만 vs에서는 이 식을 지원하지 않는다는 것을 알게 되었습니다. 왜냐하면 배열은 저렇게 변수를 통해서 집어넣어줄 수 없다는 것이었습니다. 그래서 저는 나올 수 있는 최대한의 배열을 정해놓는 방식으로 int a[1000]으로 설정을 해주었습니다. 

 

하지만 식에서는 양의 정수라고 되어 있기 때문에 올바르지 않은 식 같기는 한데 일단은 보류해놓고 진행을 해보았습니다. 

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int N;
	int a[1000];
	int min = 987654321; 

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> a[i];

		if (a[i] >= 0 && a[i] < min)
			min = a[i];
	}
	if (min == 987654321)
		cout << -1;
	else
		cout << min;

	return 0;
}

최종적으로 나온 식입니다. 여기서 min이 왜 987654321인지 감을 못 잡으시는 분도 있을 것 같은데 저도 처음에 그랬습니다. 그런데 생각을 해보니 말만 min이지 최대값을 해놓고 만약 a[i]가 이 min보다 작으면 min = a[i]가 되는 방식으로 for문을 통해서 모든 배열의 각각에 반복을 하기 때문에 결론적으로는 가장 작은 것이 min이 되는 것입니다.

 

문제에 조건처럼 0이상의 배열들만 넣어줬으며 만약 모든 배열이 마이너스일 경우 min이 원래 그대로인 987654321이 될테니 거기에 -1을 출력해주는 방식으로 해주었습니다. 

 

제가 막혔던 부분은 간단한 min == 987654321을 min = 이렇게 적어서 실수를 했습니다. 

반응형