๐Ÿ• Baaaaaarking/0x07๊ฐ• - ๋ฑ

[BOJ S4][C++] 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

์„ ๋‹ฌ 2022. 2. 21. 17:52
๋ฐ˜์‘ํ˜•

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

 

1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€

www.acmicpc.net

 

๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” N๊ฐœ์˜ ์›์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ์ˆœํ™˜ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋ช‡ ๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•œ๋‹ค.

์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, ์›๋ž˜ ํ์˜ ์›์†Œ๊ฐ€ a1, ..., ak์ด์—ˆ๋˜ ๊ฒƒ์ด a2, ..., ak์™€ ๊ฐ™์ด ๋œ๋‹ค.
  2. ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ a2, ..., ak, a1์ด ๋œ๋‹ค.
  3. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ ak, a1, ..., ak-1์ด ๋œ๋‹ค.

ํ์— ์ฒ˜์Œ์— ํฌํ•จ๋˜์–ด ์žˆ๋˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์›์†Œ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (์ด ์œ„์น˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ ํ์—์„œ์˜ ์œ„์น˜์ด๋‹ค.) ์ด๋•Œ, ๊ทธ ์›์†Œ๋ฅผ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋Š”๋ฐ ๋“œ๋Š” 2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์œ„์น˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

ํ์˜ ํšŒ์ „์€

๋์— ์žˆ๋Š” ์›์†Œ์™€ ๊ฐ™์€ ๊ฐ’์„ ๋‹ค๋ฅธ๋ฐฉํ–ฅ ๋์— pushํ•˜๊ณ 

์›๋ž˜ ์žˆ๋˜ ์›์†Œ๋Š” pop ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ  ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

q.push(q.start());
q.pop();

 

๋‹ค๋งŒ ์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ๋Š” ๋ฐฉํ–ฅ์ด ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋‘๊ฐœ๋ผ๋Š” ์ ์ด๋‹ค. 

๋”ฐ๋ผ์„œ ์•ž์ชฝ ๋’ค์ชฝ ์ƒ๊ด€์—†์ด ์–‘์ชฝ์œผ๋กœ pop push ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฑ(depue)๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.

// ์™ผ์ชฝ ํšŒ์ „
d.push_front(d.back());
d.pop_back();

// ์˜ค๋ฅธ์ชฝ ํšŒ์ „
d.push_back(d.front());
d.pop_front();

 

์ด์ œ ๊ฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ

์—ฐ์‚ฐ์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๊ตฌํ•˜๊ณ 

ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

 

์ด๋•Œ ํšŒ์ „ ํ›„์—๋„ ์›๋ž˜์˜ ์ž๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก

์—ฐ์‚ฐ ์‹œ์ž‘์ „ ๋ฑ์— ์œ„์น˜๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ์›์†Œ๋“ค์„ ์ˆœ์„œ์— ๋งž๊ฒŒ ๋„ฃ์–ด๋‘์—ˆ๋‹ค

 

์ด์ œ for๋ฌธ์œผ๋กœ ํ›‘์–ด๋ณด๋ฉด์„œ (์ง€๊ธˆ ๋ณด๋‹ˆ find์ด์šฉํ•ด์„œ ์•„์˜ˆ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋ฉด ๋” ํŽธํ–ˆ์„ํ…๋ฐ)

(๋ฑ์€ ํ๋‚˜ ์Šคํƒ๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ ์›์†Œ์— iterator๋ฅผ ์ด์šฉํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ex. d[i])

ํ•ด๋‹น ๊ฐ’์ด ๋๊ณผ ์‹œ์ž‘์ค‘ ์–ด๋””์™€ ๋” ๊ฐ€๊นŒ์šด์ง€ ์นด์šดํŠธํ•ด์„œ ์˜ค๋ฅธ์ชฝ ์™ผ์ชฝ ๋ฐฉํ–ฅ์„ ์ •ํ•˜๋ฉด ๋œ๋‹ค

 

๋‹จ, ์ด๋•Œ ์ฃผ์˜ํ• ์ 

์™ผ์ชฝ์€ ์‹œ์ž‘๋ถ€ํ„ฐ ์นด์šดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊นƒ๊ฐ’์ด 0์ด์ง€๋งŒ

์˜ค๋ฅธ์ชฝ์€ ๋์—์„œ๋ถ€ํ„ฐ ์นด์šดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊นƒ๊ฐ’์ด 1์ด๋‹ค

(์‹œ์ž‘์—์„œ ๋งจ๋์œผ๋กœ ๊ฐ€๋Š” ์—ฐ์‚ฐ์ด ํ•œ๋ฒˆ์ด ์ถ”๊ฐ€๋˜์–ด์žˆ์–ด์•ผ ํ•จ)

 

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

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

using namespace std;

int ans, n, m;
deque<int> d;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    // ์ž๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ ๋„ฃ์–ด๋†“๊ธฐ
    cin >> n >> m;
    for(int i=1; i<=n; i++) d.push_back(i);
    
    while(m--){
        
        // ์ž…๋ ฅ
        int e;
        cin >> e;
        
        // ๋” ๊ฐ€๊นŒ์šด ๋ฐฉํ–ฅ ๊ณ ๋ฅด๊ธฐ
        int right=1, left=0;
        for(int i=0; true; i++){
            if(d[i] == e) break;
            left++;
        }
        for(int i=d.size()-1; true; i--){
            if(d[i] == e) break;
            right++;
        }
        
        // ๋ฐฉํ–ฅ์— ๋งž๊ฒŒ ๋Œ๋ฆฌ๊ธฐ
        if(right < left){
            for(int i=0; i<right; i++){
                d.push_front(d.back());
                d.pop_back();
            }
            ans += right;
        } else {
            for(int i=0; i<left; i++){
                d.push_back(d.front());
                d.pop_front();
            }
            ans += left;
        }
        
        d.pop_front();
    }
    
    cout << ans;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•

'๐Ÿ• Baaaaaarking > 0x07๊ฐ• - ๋ฑ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ P5][C++] 11003๋ฒˆ: ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ  (0) 2022.02.25
[BOJ G5][C++] ๋ฐฑ์ค€ 5430๋ฒˆ: AC  (0) 2022.02.23