중복 없고, 두개의 값이 있어서 unordered_map으로 접근하려고 햇다.
앞뒤 인덱스를 확인해야 하므로
-> 인덱스 접근을 해야했다.
unordered_map 접근 잘못 되었다.
vector<pair<int,int>> 로도 접근 해볼까? 라는 생각도 함.
해당 문제에서는 키값을 찾는 것이 아니라 인덱스 접근을 하는 것이다.
크기 차이
vector로 map과 같이 사용할 수 있다면 vector를 사용하자.
체육복에서 vector를 사용해야 하는 이유
1) 인덱스 접근이다.
vector의 인덱스 접근은 시간 복잡도 1이다.
unordered_map의 탐색은 1 또는 n이다.
map의 탐색은 logN이다.
그리고 map과 unordered_map의 인덱스 접근은 위험하다.
2) 연속된 인덱스 접근하는데 바이트 크기가 크다...
다른 stl도 쓸 수 있을 것 같다라는 생각이 들었을때, 삽입이든, 탐색이든,
각 stl의 사이즈든 어떤 것을 사용할때 효율적일지 고민해보자.
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int>man(n + 2, 1);
for(const auto & i : lost)
man[i]--;
for(const auto & i : reserve)
man[i]++;
for(int i = 1; i <= man.size() ; i++)
{
if(man[i] == 0)
{
if(man[i - 1] == 2)
{
man[i - 1] = 1;
man[i] = 1;
}
else if(man[i + 1] == 2)
{
man[i + 1] = 1;
man[i] = 1;
}
}
}
for(const auto & i : man)
{
if(i != 0)
answer++;
}
answer -= 2;
return answer;
}