오늘의 문제
https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
pair
오늘 문제는 c++의 pair를 사용해 풀었다.
pair는 은근히 문제를 풀다 보면 많이 사용하고 알아두면 굉장히 유용한 것 같다.
pair는 두 개의 값을 하나의 객체로 묶어서 저장할 수 있는 STL 템플릿 클래스이다.
두 개의 값을 가지고 있는 자료형으로 생각하면 될 것 같다.
pair는 utility 라이브러리에 있어서 #include <utility>를 해줘야 한다.
pair를 생성하는 방법은 아래와 같다. (넣을 자료형은 필요한 것 넣으면 된다)
- pair<int, string> p(1, "hello");
- pair<int, string> p = make_pair(1, "hello");
pair에 저장된 값들을 꺼내려면 아래와 같이 하면 된다.
pair<int, string> p = make_pair(1, "hello");
// 첫번째 값 꺼내기
int first = p.first;
// 두번째 값 꺼내기
string second = p.second;
이렇게 first, second를 사용해 각 값을 꺼낼 수 있다.
pair는 비교 연산이 가능하다.
이때 비교 기준은 먼저 first이다.
first를 비교하고 first가 같다면 second를 기준으로 비교한다.
그래서 vector<pair<int,int>>를 하고 sort 메서드를 사용하면 first를 기준으로 정렬이 된다.
이전에 이것을 모르고 굉장히 헤맸던 기억이 있다.
정렬 기준을 바꾸고 싶다면 아래처럼 바꾸면 된다.
아래 코드는 second를 기준으로 비교하는 코드이다.
// second 기준 오름차순 정렬 함수
bool compareBySecond(const pair<int, string>& a, const pair<int, string>& b) {
return a.second < b.second;
}
int main() {
vector<pair<int, string>> vec = {
{3, "banana"},
{1, "apple"},
{2, "cherry"}
};
sort(vec.begin(), vec.end(), compareBySecond);
return 0;
}
위처럼 함수로 정렬 기준을 바꿔야 하는 경우가 꽤 있다.
또 하나의 기준이 아니라 복합적인 기준이나 처리를 해야 하는 경우가 있다.
함수에서 처리를 다양하게 해야 하는데 늘 헷갈려서 잘 알아두면 좋을 것 같다.
회고
오랜만에 문제를 풀어냈다.
늘 실패하다가 오랜만에 푸니 기분이 좋았다 허허...
좀 쉬운 문제였던 것 같은데 그래도 풀어냈으니...
딱히 어려운 알고리즘 개념을 적용할 것은 없는 것 같은 문제였다.
그냥 문제를 잘 읽고 구현을 잘하면 되는 문제인 것 같다.
문제에서 보여주는 표를 잘 보고 구현을 잘하면 된다.
나는 vector<pair<int, int>>로 (증설한 서버 개수, 삭제되어야 하는 시간)의 vector를 관리했다.
그래서 시간을 for문으로 돌면서 해당 vector에서 삭제되어야 하는 시간과 현재 시간이 같은지 확인했다.
같다면 증설한 서버 개수를 현재 서버 개수에서 빼주는 방식으로 했다.
'알고리즘' 카테고리의 다른 글
99클럽 코테 스터디 16일차 TIL + 프로그래머스 셔틀버스 문제 풀이 (0) | 2025.04.22 |
---|---|
99클럽 코테 스터디 11일차 TIL + 프로그래머스 가장 많이 받은 선물문제 풀이 (0) | 2025.04.15 |
99클럽 코테 스터디 7일차 TIL + C++ 순열 만들기 (0) | 2025.04.09 |
99클럽 코테 스터디 6일차 TIL + MST (0) | 2025.04.08 |
99클럽 코테 스터디 3일차 TIL + Knapsack 배낭 문제 (0) | 2025.04.03 |