본문 바로가기

알고리즘

Boj 32201 c++ 눈사람(해시)

#include<iostream>
#include<vector>
#include<queue>
#include<unordered_map>

using namespace std;


int main(){

    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n;
    cin>>n;
    vector<long long> backnum(n);
    queue<long long> q;
    vector<int> dp(n);
    vector<int> temp(n);
    unordered_map<long long, int> um;
    int r=0;

    for(int i=0; i<n; i++){
        cin>>backnum[i];
        dp[i]=++r;
        um[backnum[i]]=i;
    }
    r=0;

    for(int i=0; i<n; i++){
        cin>>backnum[i];
       int j=um[backnum[i]];
       temp[i]=dp[j]-++r;
    }


    int Max=-999999;
    for(int i=0; i<n; i++){
        if(Max<temp[i]){
            Max=temp[i];
        }

    }
    for(int i=0; i<n; i++){
        if(Max==temp[i])
            q.push(backnum[i]);
    }

    while(!q.empty()){
        cout<<q.front()<<" ";
        q.pop();
    }




}

해시를 통해서 등번호 저장하고 등수 비교해서 출력하면된다.

맵이라는 자료구조를 처음 접하였기에 공부가 많이 되었다.

'알고리즘' 카테고리의 다른 글

Boj 1747 c++ 소수&팰린드롬  (0) 2025.05.25
Boj 1920 c++ 수 찾기(해시연습)  (0) 2025.05.24
Boj 1193 c++눈물의 노가다  (0) 2025.05.23
Boj 11659 c++ 구간 합 구하기 4  (0) 2025.05.22
Boj 2531 c++ 회전초밥  (0) 2025.05.22