Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
Archives
- Today
- Total
기록
99클럽 코테 스터디 18일차 TIL C++ max_element 본문
오늘의 학습 키워드
문제1: max_element 활용
문제 링크 - 프로그래머스 "모의고사"
공부한 내용 정리
(1) max vs max_element
C++에서는 최댓값을 구할 때 std::max
와 std::max_element
를 상황에 맞게 선택해서 사용할 수 있습니다. 두 함수는 비슷한 목적을 가지고 있지만, 활용 방식과 반환값에서 차이가 있습니다.
항목 | std::max |
std::max_element |
---|---|---|
기능 | 두 값 또는 세 값 중 최댓값 반환 | 컨테이너 내에서 최댓값을 가진 요소의 반복자 반환 |
입력값 | 두 값, 세 값, 또는 초기화된 값들 | 반복자 범위(begin, end) |
반환값 | 최댓값 자체를 반환 | 최댓값을 가진 반복자(iterator)를 반환 |
사용 조건 | 비교 대상이 명확한 경우 | 컨테이너에서 최댓값을 찾는 경우 |
커스텀 비교 함수 | 가능 | 가능 |
std::max의 사용 예시
std::max
은 두 값 또는 세 값 중 최댓값을 반환하는 함수입니다. 컨테이너보다는 특정 값의 비교에 주로 사용됩니다.
#include <algorithm>
#include <iostream>
int main() {
int a = 10, b = 20, c = 15;
// 두 값 비교
int max_value = std::max(a, b);
std::cout << "두 값의 최댓값: " << max_value << std::endl;
// 세 값 비교
max_value = std::max({a, b, c}); // 초기화 리스트를 사용
std::cout << "세 값의 최댓값: " << max_value << std::endl;
return 0;
}
std::max_element의 사용 예시
std::max_element
는 컨테이너의 요소 중 최댓값을 가진 위치를 반환합니다. 반복자(iterator)를 반환하므로 최댓값 자체를 얻으려면 *
를 사용해야 합니다.
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {10, 20, 15, 30, 25};
// 최댓값의 위치
auto max_iter = std::max_element(vec.begin(), vec.end());
std::cout << "최댓값: " << *max_iter << std::endl;
std::cout << "최댓값의 인덱스: " << std::distance(vec.begin(), max_iter) << std::endl;
// 커스텀 비교 함수: 절댓값 기준으로 비교
max_iter = std::max_element(vec.begin(), vec.end(), [](int a, int b) {
return std::abs(a) < std::abs(b);
});
std::cout << "절댓값 기준 최댓값: " << *max_iter << std::endl;
return 0;
}
(2) 전체 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> vecScore = {0, 0, 0};
vector<vector<int>> vecPatterns= {\
{1, 2, 3, 4, 5},\
{2, 1, 2, 3, 2, 4, 2, 5},\
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}\
};
for (int i=0;i<answers.size();i++){
const auto &ans = answers[i];
int it, psize;
vector<int> pattern;
for (int j=0;j<vecPatterns.size();j++){
pattern = vecPatterns[j];
psize = pattern.size();
it = pattern[i%psize];
if (it==ans) vecScore[j]++;
}
}
vector<int> answer;
int maxScore = *max_element(vecScore.begin(), vecScore.end());
for (int i=0;i<vecScore.size();i++){
if (maxScore == vecScore[i]) answer.push_back(i+1);
}
return answer;
}
회고
이번 학습을 통해 std::max
와 std::max_element
의 차이를 명확히 이해할 수 있었습니다. 특히 std::max_element
의 커스텀 비교 함수는 단순한 숫자 비교 이상의 상황에서도 강력한 도구임을 느꼈습니다.
'코딩테스트 > cpp' 카테고리의 다른 글
99클럽 코테 스터디 20일차 TIL C++ Priority Queue과 multiset, std::accumulate (0) | 2024.11.18 |
---|---|
99클럽 코테 스터디 19일차 TIL C++ priority_queue, 약수탐색(sqrt) (0) | 2024.11.18 |
99클럽 코테 스터디 17일차 TIL C++ 우선순위큐, 표준 입출력 동기화 해제 (0) | 2024.11.17 |
99클럽 코테 스터디 16일차 TIL C++ 문자열 : 그리디, set, priority_queue (0) | 2024.11.15 |
99클럽 코테 스터디 15일차 TIL C++ Deque, Pass By Value와 Pass By Reference (0) | 2024.11.13 |
Comments