๐Ÿ• Baaaaaarking/0x05๊ฐ• - ์Šคํƒ

[BOJ G1][C++] ๋ฐฑ์ค€ 3015๋ฒˆ: ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ

์„ ๋‹ฌ 2022. 2. 16. 23:07
๋ฐ˜์‘ํ˜•

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

 

3015๋ฒˆ: ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ

์ฒซ์งธ ์ค„์— ์ค„์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 500,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์‚ฌ๋žŒ์˜ ํ‚ค๊ฐ€ ๋‚˜๋…ธ๋ฏธํ„ฐ ๋‹จ์œ„๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ํ‚ค๋Š” 231 ๋‚˜๋…ธ๋ฏธํ„ฐ ๋ณด๋‹ค ์ž‘๋‹ค. ์‚ฌ๋žŒ

www.acmicpc.net

 

๋ฌธ์ œ

์˜ค์•„์‹œ์Šค์˜ ์žฌ๊ฒฐํ•ฉ ๊ณต์—ฐ์— N๋ช…์ด ํ•œ ์ค„๋กœ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.

์ด ์—ญ์‚ฌ์ ์ธ ์ˆœ๊ฐ„์„ ๋งž์ดํ•˜๊ธฐ ์œ„ํ•ด ์ค„์—์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ๋ฐฑ์ค€์ด๋Š” ๊ฐ‘์ž๊ธฐ ์ž๊ธฐ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๊ฐ€ ๊ถ๊ธˆํ•ด ์กŒ๋‹ค.

๋‘ ์‚ฌ๋žŒ A์™€ B๊ฐ€ ์„œ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด, ๋‘ ์‚ฌ๋žŒ ์‚ฌ์ด์— A ๋˜๋Š” B๋ณด๋‹ค ํ‚ค๊ฐ€ ํฐ ์‚ฌ๋žŒ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.

์ค„์— ์„œ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์„œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์Œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ค„์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 500,000)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์‚ฌ๋žŒ์˜ ํ‚ค๊ฐ€ ๋‚˜๋…ธ๋ฏธํ„ฐ ๋‹จ์œ„๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ํ‚ค๋Š” 231 ๋‚˜๋…ธ๋ฏธํ„ฐ ๋ณด๋‹ค ์ž‘๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์„œ ์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์„œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์Œ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด1 - ์‹คํŒจ

(๋ฐ˜๋ก€ ์•Œ๋ ค์ค˜.. ์ œ๋ฐœ..)

 

์ฒ˜์Œ์— ์‹œ๋„ํ•œ ๋‚˜์˜ ํ’€์ด..

input๋“ค์„ ๋ฒกํ„ฐ๋กœ ๋ฐ›๊ณ  ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ

์ž๊พธ 9% ์—์„œ ํ‹€๋ ธ๋‹ค๊ณ  ๋‚˜์˜ด ใ… ใ… ใ… 

 

#include <iostream>
#include <stack>
#include <vector>

using namespace std;

vector <int> input;
stack <int> s;
long long ans = 0;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    // ์ž…๋ ฅ
    int n;
    cin >> n;
    for(int i=0; i<n; i++){
        int tmp;
        cin >> tmp;
        input.push_back(tmp);
    }
    
    // ๊ณ„์‚ฐ
    for(int i=0; i<n; i++){
        s.push(0);
        for(int j=i+1; j<n; j++){
            if(s.top() > input[j]){
                break;
            }
            ans++;
            if(input[i] < input[j]){
                break;
            }
            s.push(input[j]);
        }
        while(!s.empty()) s.pop();
    }
    
    // ์ถœ๋ ฅ
    cout << ans;
    
    return 0;
}

 

์•„๋ฌดํŠผ ์•„๋ฌด๋ฆฌ ์—ด์‹ฌํžˆ ๊ฒŒ์‹œํŒ์„ ๋’ค์ ธ๋ด๋„ ์•ˆ๋ผ์„œ..

๋‹ค๋ฅธ ํ’€์ด๋กœ ๊ฐ„๋‹ค

 

ํ’€์ด 2

์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋™์‹œ์— ์Šคํƒ์— ๋„ฃ์œผ๋ฉด์„œ ๊ณ„์‚ฐํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ํ’€์ด

์‹œ๊ฐ„๋ณต์žก๋„ ๋ฉด์—์„œ๋„ ์ด๊ฒŒ ๋” ๋‚ซ๋‹ค

๋‹ค๋งŒ ํ’€์ด๊ฐ€ ์กฐ๊ธˆ. ๋งŽ์ด. ๋ณต์žกํ• ๋ฟ..


์šฐ์„  ๋ชจ๋“  ์• ๋“ค์˜ ํ‚ค๊ฐ€ ๋‹ค ๋‹ค๋ฅด๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋กœ์ง์„ ๊ตฌ์„ฑํ–ˆ๋‹ค

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์˜ˆ์ œ๋ฅผ ์‚ด์ง ๋ณ€ํ˜•ํ•ด์„œ "6 2 4 1 2 5 1" ์„ ๋„ฃ์–ด ๋‹ต 7์ด ๋‚˜์˜ค๋ฉด ๋จ

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <stack>

using namespace std;

stack<int> s;
long long ans;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int n;
    cin >> n;
    
    while(n--){
        int h;
        cin >> h;
        
        // (2)
        while(!s.empty() && s.top().first < h){
            s.pop();
            ans++;
        }
        
        // (1)
        if(!s.empty()) ans++;
        s.push(h);
    }
   
    cout << ans;
    
    return 0;
}

/*
 */

 

๋กœ์ง์„ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค

 

์ฐจ๋ก€๋Œ€๋กœ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ์Šคํƒ์— ๋„ฃ์œผ๋ฉฐ ์Œ์„ ๋งŒ๋“œ๋Š”๋ฐ,

์ž…๋ ฅ๊ฐ’์ด ์•ˆ์— ์žˆ๋Š” ๊ฐ’๊ณผ ์ ‘์ด‰ํ•˜๋ฉด ํ•˜๋‚˜์˜ ์Œ์ด ์™„์„ฑ๋˜๋Š”๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค

(ex. top=2 ์ผ๋•Œ 4๋ฅผ ๋„ฃ์œผ๋ฉด 2์™€4 ํ•œ์Œ์ด ๋งŒ๋“ค์–ด์ง)

 

๊ทธ๋ฆฌ๊ณ  ํ•œ์Œ์ด ์™„์„ฑ๋ ๋•Œ๋งˆ๋‹ค ans++;

 

(1)

๊ทธ๋ž˜์„œ ๋น„์–ด์žˆ์ง€ ์•Š์€ ์Šคํƒ์— ๊ฐ’์„ ๋„ฃ์„๋•Œ๋งˆ๋‹ค ans++

์Šคํƒ์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ๋งŒ๋‚˜๋Š” ์• ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์Œ์ด ์•ˆ๋งŒ๋“ค์–ด์กŒ์œผ๋‹ˆ๊นŒ ans ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ push

 

(2)

์ด๋•Œ ๋„ฃ์œผ๋ ค๋Š” ๊ฐ’๋ณด๋‹ค ๊ผญ๋Œ€๊ธฐ ๊ฐ’์ด ๋” ์ž‘๋‹ค๋ฉด ์ง€๊ธˆ ๋„ฃ์œผ๋ ค๋Š” ์• ๋Š” ๊ผญ๋Œ€๊ธฐ ๊ฐ’ ๋ฐ‘์— ์žˆ๋Š” ์• ๋„ ๋ณผ ์ˆ˜ ์žˆ์„๊ฑฐ๋‹ค

๋”ฐ๋ผ์„œ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๊ผญ๋Œ€๊ธฐ๊ฐ’๋“ค์„ while๋กœ ๊ณ„์† ๊บผ๋‚ผ (pop)๊ฑด๋ฐ,

์ด๋•Œ ๊บผ๋‚ด์ง€๋Š” ์• ๋“ค๋„ ๋‹ค ์ง€๊ธˆ ๋„ฃ์œผ๋ ค๋Š” ์• ์™€ ์Œ์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ans++

 


 

์ž˜ํ–ˆ์œผ๋‹ˆ ๋‹ค์Œ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋ณด์ž

ํ‚ค๊ฐ€ ๊ฐ™์€ ์• ๋“ค์ด ์žˆ๋Š”๊ฒฝ์šฐ, ๊ทธ ์• ๋“ค์€ ํ•˜๋‚˜๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค. (์ค‘๋ณต์„ ์ธ์ •ํ•˜์ง€ ์•Š์Œ)

๊ทผ๋ฐ ๊ณ„์‚ฐ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ans ์นด์šดํŠธ๋ฅผ ์—ฐ์†์œผ๋กœ ์ค‘๋ณต๋œ ์• ๋“ค ์ˆ˜ ๋งŒํผ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค

์—ฐ์†์œผ๋กœ ์ค‘๋ณต๋œ ์• ๋“ค ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด pair<int, int> ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ๋Š” ํ‚ค๋ฅผ, ๋‘๋ฒˆ์งธ๋Š” ์—ฐ์† ์ค‘๋ณต ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

(1) pop์„ ํ• ๋•Œ ans๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ผญ๋Œ€๊ธฐ์˜ ์—ฐ์† ์ค‘๋ณต ์ˆ˜ ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

(2) ๋„ฃ์œผ๋ ค๋Š” ์• ์™€ ๊ผญ๋Œ€๊ธฐ ์•  ํ‚ค๊ฐ€ ๊ฐ™๋‹ค๋ฉด,

(3) ๋“ค์–ด๊ฐ€๋Š” ์• ๋Š” ์ž์‹ ๊ณผ ๊ฐ™์€ ํ‚ค์˜ ์• ์™€์˜ ์Œ์„ ์ด๋ฃจ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ผญ๋Œ€๊ธฐ ์• ์˜ second ๊ฐ’์„ ++ ํ•ด์ค€๋‹ค. (์—ฐ์† ์ค‘๋ณต ์ˆ˜ ์ฆ๊ฐ€)

(4) ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ „์— ์ž์‹ ๊ณผ ๊ฐ™์€ ํ‚ค์ธ ์• ๋“ค๊ณผ๋„ ์Œ์„ ์ด๋ฃจ๋ฏ€๋กœ ans ๋ฅผ ์—ฐ์† ์ค‘๋ณต ์ˆ˜๋งŒํผ ์ฆ๊ฐ€

(5) ๊ทผ๋ฐ ๋„ฃ์œผ๋ฉด์„œ ๊ฐ™์€ํ‚ค๋“ค ๋’ค์— ํฐ ํ‚ค ํ•˜๋‚˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฑ”๋ž‘ ์Œ์„ ์ด๋ฃจ๋ฏ€๋กœ ans++;

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <stack>

using namespace std;

stack<pair<int, int>> s;
long long ans;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int n;
    cin >> n;
    
    while(n--){
        int h;
        cin >> h;
        
        // (1)
        while(!s.empty() && s.top().first < h){
            ans += s.top().second;
            s.pop();
        }
        
        // (2)
        if(!s.empty() && s.top().first == h) {
            ans += s.top().second;  //(4)
            s.top().second++;  //(3)
            
            // (5)
            if(s.size() > 1) ans++;
            
            continue;
        }
        
        if(!s.empty()) ans++;
        
        s.push({h,1});
    }
   
    cout << ans;
    
    return 0;
}

/*
 */

 

๋!

๋‚ด์ธ์ƒ ์ฒซ Gold1!!

์ˆ˜๊ณ ํ–ˆ๋‹ค!!!

๋ฐ˜์‘ํ˜•