# [Stack ํ™œ์šฉ] 17299. ์˜ค๋“ฑํฐ์ˆ˜
Study Repository

[Stack ํ™œ์šฉ] 17299. ์˜ค๋“ฑํฐ์ˆ˜

by rlaehddnd0422

https://www.acmicpc.net/problem/17299

 

17299๋ฒˆ: ์˜ค๋“ฑํฐ์ˆ˜

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

 

 

์˜คํฐ์ˆ˜๋ฅผ ํ’€์—ˆ๋‹ค๋ฉด ๋งค์šฐ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋งค์ปค๋‹ˆ์ฆ˜์€ ๋™์ผํ•œ๋ฐ, ์˜คํฐ์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์–ด๋–ค ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์–ด๋–ค ๊ฐ’์„ ์ •๋‹ต ๋ฐฐ์—ด์— ์ €์žฅํ•ด์•ผํ•˜๋Š”์ง€๋งŒ ์ž˜ ํŒŒ์•…ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ์„  ์„ธํŒ…์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ  map์„ ์ด์šฉํ•ด ์นด์šดํŒ…ํ•˜์—ฌ c ๋ฐฐ์—ด์— ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

์˜คํฐ์ˆ˜์—์„œ๋Š” ๋ฐฐ์—ด ๊ฐ’์„ ์Šคํƒ์— ๋„ฃ๊ณ  ์Šคํƒ์˜ ํƒ‘๊ฐ’๊ณผ ๋น„๊ตํ–ˆ๋‹ค๋ฉด, ์˜ค๋“ฑํฐ์ˆ˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ๋Š” ๋น„๊ต ๊ณผ์ •์—์„œ v๋ฐฐ์—ด์ด ์•„๋‹Œ c ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ‘ธ์‰ฌํ•  ๋•Œ๋Š” ์˜คํฐ์ˆ˜ ๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐฐ์—ด ๊ฐ’์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•„์ž๋Š” ๋น„๊ตํ•  ๋•Œ๋Š” stack์˜ top์˜ second ( c๋ฐฐ์—ด ), ํ‘ธ์‰ฌํ•  ๋•Œ๋Š” stack์˜ top์˜ first ( v๋ฐฐ์—ด ) ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒ์— v๋ฐฐ์—ด๊ฐ’๊ณผ c๋ฐฐ์—ด๊ฐ’์„ pair๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

 

์†Œ์Šค ์ฝ”๋“œ 

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <unordered_map>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n' 

using namespace std;

int n;
vector<int> v(1000001);
vector<int> cnt(1000001);
vector<int> ans(1000001,-1);
unordered_map<int, int> m;

stack<pair<int,int>> st;

int main()
{
    FASTio;
    cin >> n;

    for(int i=0;i<n;i++)
    {
        cin >> v[i];
        m[v[i]]++;
    }

    for(int i=0;i<n;i++)
    {
        cnt[i] = m[v[i]];
    }

    st.push(make_pair(v[n-1], cnt[n-1]));

    for(int i=n-2;i>=0;i--)
    {        
        while(!st.empty() && st.top().second <= cnt[i])
        {
            st.pop();
        }
    
        if(st.empty())
        {
            st.push(make_pair(v[i], cnt[i]));
            continue;
        } else {
            ans[i] = st.top().first;
            st.push(make_pair(v[i], cnt[i]));
        }
    }

    for(int i=0;i<n;i++){
        cout << ans[i] << ' ';
    }


    return 0;
}

 

 

์ฒ˜์Œ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋‹ค๊ฐ€ map์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ map์„ unordered_map์œผ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐ.

 

์ฐธ๊ณ ์ž๋ฃŒ 

 

hash_map | unordered_map | map ์ฐจ์ด ๋น„๊ต, ํŠน์ง• ์ •๋ฆฌ - C++

hash_์™€ unordered_์— ๋Œ€ํ•˜์—ฌ hash๋ผ๋Š” ๋ง์ด ๋ถ™์ง€ ์•Š์€ map,set์€ ์ž๋ฃŒ๋ฅผ ์ •๋ ฌํ•ด์„œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. (key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ) ๋”ฐ๋ผ์„œ ์ˆœํšŒํ•  ๋•Œ๋„ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์€ ์ˆœ์„œ๋Œ€๋กœ๊ฐ€ ์•„๋‹Œ ์ž๋™์ •๋ ฌ๋œ

eocoding.tistory.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ