백준 10816 숫자 카드 2

2023. 6. 22. 18:51카테고리 없음

반응형

이번 문제도 이분 탐색이었다. 다만 이번에는 중복되는 숫자 카드들이 있어서, 그 갯수 까지 헤아려야 하는 문제였다.

이전 이분탐색과 코드는 거의 유사하나, map 을 이용한 부분이 조금 달랐고, map 을 사용하는 것에 아직 익숙치 않다는 게 슬프다.

이번 기회에 확실하게 챙겨가자!!

 

우선 이분탐색은 반드시 인덱스 기준으로 하자. 

from, to 등을 arr[i] 가 아닌 arr 로 하자는 것.

그러고 비교 값을 arr[mid] 와 비교해야 한다! 안그러면 값이 틀린다.

 

map 사용하기

우선 map 에 값을 입력하는 것은 잘 알고 있었다.

counts.insert(make_pair(tmp, 1));

다만 map 에서 키 - value 값의 value 를 증가시키고자 할 때 어떻게 해야 하는지 헷갈렸는데, 이렇게 해.

counts.find(tmp)->second++;

이게 문제이다.

 

if (tmp == arr1[mid])
{
   found = 1;
   // ans = counts.find(mid)->second;
   ans = counts[arr1[mid]];
   break;
}

주석 친 코드로 진행 했을 때는 0 이 들어갔고,

밑에 값으로 했을 때에는 값이 제대로 들어갔다.

 

차이가 뭔지 잘 모르겠지만... key 를 통해 value 를 가져올 때는 저렇게 쉽게 하자.

counts 라는 map 에 인자로 key 값을 넣으면 알아서 가져와 주는가보다.

-> key 값이 string 이면??

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> counts;

    counts["name1"] = 10;
    counts["name2"] = 5;

    std::cout << counts["name1"] << std::endl; // Output: 10
    std::cout << counts["name2"] << std::endl; // Output: 5
    std::cout << counts["name3"] << std::endl; // Output: 0 (default value for int)

    return 0;
}

잘 된다!!

map 에 대해 조금 더 자세히 알아볼 수 있었던 시간인 것 같다.

 

이젠 까먹지 말자.. 으아악