나 개발자 진짜 되냐?

백준 C++ 10818번 최소, 최대 ( minmax_element ) 본문

C++을 시작해봐요!/단계문제를 풀어보아요!

백준 C++ 10818번 최소, 최대 ( minmax_element )

Snow Rabbit 2026. 2. 12. 17:47

 

두 명이서 하는 멀티게임을 친구랑 시작했다.

흥미롭다.

 

레벨을 같이 올리려고 기다리고 있다.

기다리며 쉬운 문제 하나 풀었다.

쉬운데...

내가 모르는? STL이어서 적어본다.


 

최댓값 최솟값 max, min을 사용해서 문제 풀었다.

 

근데 사실은 백터로 풀어서 max_element 하고 싶었는데..

분명.. 아는 거 같았는데 이름만 아는 건지

문법 쓰다가 뭐 빨간 줄 엄청 떴다..ㅋㅋ

 

 

 

사실 처음에

mx 이랑 mn에 초기화를 0으로 해놔서...

틀렸었다.

키키...

안된다!!!!! 안된다!!

그렇게 될 경우 모든 입력이 음수 거나 양수일 때 문제가 생긴다

10 20 30 이면

최솟값이 10이 나와야 하는데 0으로 초기화해주면 0이 되어버리기 때문..!!

 

제출하니깐 맞았다.

 

제씨는

sort해주는 방법도 좋다고 했다. 근데 그거보다 지금 식이 더 좋다고 했다.

 

그래서 나는 max_element에 대해 물었다.

 

요즘 세상이 좋아졌다며 minmax_element로 업그레이드 됐다고 알려주었다.

 

벡터에 값을 다 넣고

minmax_element를 해주면 된다고 한다.

안의 식은 v.begin과 v.end로 해주면 되지만,

옆에가 auto를 써줘야 한다는 점이 특징이다.

 

왜냐면 minmax_element의 친구 특성이

값을 두 개를 반환한다. 즉 반환값이 pair인 것

하지만 이 pair은 선언해 주기도 굉장히 까다롭기 때문에

일단 누군지 모르지만 받을게!라는 느낌으로 auto를 쓰게 된다.

 

auto result = minmax_element(v.begin(), v.end());

 

이 element는 값을 반환해 주는 게 아니라 위치를 반환해 주기 때문에!!!!

 

출력 시

cout << *result.first << " " << *result.second로 해줘야 한다!

 

읽기 쉽게 하는 방법 또 하나는

 

대괄호로 두 개 받기!!!

 

auto [ mn, mx ] = minmax_element(v.begin(), v.end());

 

이렇게 해주면 값을 두개 받을 수 있게 되며!

출력에는 별은 포함하면서?

 

cout << *mn << " " <<  *mx 로 정리할 수 있다.

 


minmax_element에 대해 알아봤다.

 

중요한 것은

 

1. auto로 값을 받을 것

2. 값이 값이 아니라 주소이기 때문에 출력 시 *를 써줘야 한다는 것.

3. minmax로 있어서 두 가지 값을 대소비교 하기도 가능!

 

오늘 문제 완!

 

크크 게임하러 가야지!!!