[시뮬레이션] 2024 KAKAO WINTER INTERNSHIP (Level 1)

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
    • 본인이 준 갯수 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) 이렇게 하는게 편함

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

카테고리:

업데이트: