백준/해시

[백준] C++ 2002번 추월

2zreal 2024. 9. 29. 14:17

굉장히 재미있었던 문제였다. 추월이라니?!  모두 안전 운전합시다!

 

문제해결방법

1.hashMap을 통해 차량번호와 순서를 저장한다.

2. 터널 출구에서 나오는 순서를 확인하면서 만약 자기보다 뒤에 있었던 차가 자기보다 앞으로 가있다면 추월한 차량을 기준으로 앞에 있는 차량들의 순서를 +1 해준다.(자기보다 앞에 있는 차가 다른 차를 추월하는 것은 자신의 순서에 영향을 미치지 않는다.)

 

그림을 보면 B가 A를 추월하였다. C D E의 순서에는 영향을 미치지 않았고 A의 순서에만 영향을 미쳤다.

 

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    unordered_map<string, int> hashMap;

    int N = 0;

    cin >> N;

    for (int i = 0; i < N; i++)
    {
        string temp = "";
        cin >> temp;
        hashMap[temp] = i;
    }

    int count = 0;
    for (int i = 0; i < N; i++)//자기를 추월했다면?? 자기보다 앞에 있는 차가 다른 다른 추월하는 것은 자신의 순서에 영향을 미치지 않는다.
    {
        string temp = "";
        cin >> temp;
        if (hashMap[temp] > i)
        {
            for (const auto& pair : hashMap) 
            {
                if (pair.second < hashMap[temp])
                {
                    hashMap[pair.first]++;
                }
            }
            count++;
        }
    }

    cout << count;
    
}