백준 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 에 대해 조금 더 자세히 알아볼 수 있었던 시간인 것 같다.
이젠 까먹지 말자.. 으아악