[시뮬레이션] 2024 KAKAO WINTER INTERNSHIP (Level 1)
풀이
2. 선물 기록을 파싱하여 각 친구의 준 선물, 받은 선물 개수 카운트
-
split
함수를 직접 구현 (c++에는 split가 없어서 불편하다,, 외워야지 뭐,,)#include <sstream> vector<string> split(string input, char delimiter) { vector<string> answer; stringstream ss(input); string temp; while(getline(ss, temp, delimiter)) { answer.push_back(temp); } return answer; }
-
map을 3가지 준비
- 누가 누구에게 줬는지 기록과 갯수를 담은
giftMap
- 누가 누구에게 : pair로 관리 ⇒ {{`giver`, `receiver`}, count}
map<pair<string, string>, int>
==pair<pair<string, string>, int>
- for문에서
auto& record
로 받는다 할때- record.first ==
pair<string, string>
- record.first.first == (string) giver
- record.first.second == (string) receiver
- record.second ==
int
- record.first ==
- 본인이 준 갯수
givenCount
- 본인이 받은 갯수
receivedCount
- 누가 누구에게 줬는지 기록과 갯수를 담은
1. 각 친구의 선물 지수를 저장할 map ⇒ giftIndex
3. 각 친구의 선물 지수를 계산
4. 다음달에 받을 선물 수를 계산할 map ⇒ nextMonthReceived
5. 선물 기록을 바탕으로 다음 달에 받을 선물 수 예측
- 모든 친구들의 경우의 수를 확인 후 가장 max 값을 구하는 것이기 때문에 이중 for문으로 구성
giftMap
에서 두 친구 사이의 주고 받은 선물의 갯수를 파악- 더 많이 준 친구는 다음 달 선물을 하나 받는다. ⇒
nextMonthReceived[]++;
- 만약 같다면
giftIndex
선물 지수로 판단- 선물 지수가 더 큰 사람은 다음 달 선물을 하나 받는다. ⇒
nextMonthReceived[]++;
- 선물 지수가 더 큰 사람은 다음 달 선물을 하나 받는다. ⇒
6. 가장 많은 선물을 받을 친구의 수 계산
nextMonthReceived
에서 max 값을 구함nextMonthReceived
도 타입이map<string, int> nextMonthReceived;
인데- map의 경우 loop를 돌릴 때
for(auto& record : nextMonthReceived)
이렇게 하는게 편함
- map의 경우 loop를 돌릴 때
auto와 auto&의 차이점
auto
는 자동 타입 추론(auto type deduction) 시 사용하는 키워드로, 변수의 타입을 컴파일러가 자동으로 결정하도록 도와준다.
auto
는 값을 복사하여 사용합니다. 즉, 원본 값을 복사한 새 변수를 생성합니다.auto&
는 참조(Reference)를 사용합니다. 원본 변수의 주소를 참조하여, 원본 데이터를 수정하거나 읽어올 때 사용합니다.
언제 auto&
를 사용해야 할까?
- 원본 데이터를 수정해야 할 때: 반복문을 통해 컨테이너 요소를 변경하고자 할 때
auto&
를 사용합니다. - 큰 데이터를 복사하지 않고 효율적으로 사용하고 싶을 때:
auto
로 큰 객체를 복사하면 메모리 사용량이 늘어나고 성능이 저하될 수 있으므로,auto&
로 참조를 사용하여 원본 데이터를 직접 접근하는 것이 좋습니다.
추가: const auto&
의 사용
const auto&
는auto&
와 마찬가지로 참조를 사용하지만, 참조한 데이터를 변경하지 못하도록 보장해줍니다.
for (const auto& value : numbers) {
// value += 10; // 에러 발생: value가 const 참조이므로 값을 변경할 수 없음
}
const auto&
는 읽기 전용으로 데이터를 참조하여 반복 작업을 수행하고자 할 때 사용됩니다.
코드
https://github.com/KimGyeongLock/CodingTest/blob/main/2024_kakao_winter_intership_level_1.cpp