포스트

max_element로 최댓값 인덱스 구하기

로직이 맞아도 0-based·1-based로 오답이 난다

max_element가 돌려준 이터레이터에서 begin()을 빼면 인덱스가 나온다. 값도 위치도 맞게 구했는데 오답이 난 이유는 문제가 요구한 '몇 번째'가 1부터 세는 값이었기 때문.

max_element로 최댓값 인덱스 구하기

최댓값과 그 위치를 함께 출력하는 문제를 풀면서, 로직이 전부 맞는데도 오답이 나는 경우를 처음 겪었다. 이 글에서는 그 원인을 이야기하려 한다 — 구현은 max_element로 값과 인덱스를 뽑는 짧은 패턴 하나뿐이고, 나머지는 전부 출력 기준을 못 맞춘 트러블슈팅이다.

기술 구현 — max_element로 값과 인덱스를 함께 얻기

max_element(begin, end)는 최댓값을 가리키는 반복자를 돌려준다. 여기서 begin()을 빼면 인덱스가 나온다.

1
2
3
int idx = max_element(nums.begin(), nums.end()) - nums.begin();
cout << nums[idx] << endl;
cout << idx + 1 << endl; // 문제는 1-based 위치

트러블슈팅 — 값은 맞는데 위치가 틀린다

원인: C++ 컨테이너의 인덱스는 0부터 시작하지만, 문제가 요구한 “몇 번째”는 1부터 세는 값이다. 두 기준이 하나의 출력에서 만나는데, 제출 직전 출력 포맷을 검증하는 단계가 없었다.

증상: 최댓값은 맞게 나오는데 위치만 1씩 작게 출력돼 오답 처리됐다. 로직에는 손댈 곳이 없어 원인을 찾는 데 시간을 더 썼다.

해결: 위치 출력에만 +1 보정을 넣었다. 그리고 문제 지문에 “몇 번째”라는 표현이 보이면 1-based 보정 여부부터 확인하고, 제출 전 “출력 기준(0-based / 1-based)”을 체크하는 순서로 굳혔다.

같은 날 푼 문제들의 전체 풀이는 백준 1000·백준 2562에 정리돼 있다.

핵심 요약max_element(...) - begin() 패턴으로 최댓값의 인덱스를 구할 수 있다. 그리고 로직이 맞아도 0-based 인덱스와 문제의 1-based “몇 번째” 요구를 못 맞추면 오답이 된다 — 제출 전 출력 기준 확인을 루틴으로 고정했다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.