๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ํšŒ์ „ํ•˜๋Š” ํ(1021)

[๋ฐฑ์ค€(BOJ)] ํšŒ์ „ํ•˜๋Š” ํ(1021) C++

๋ฌธ์ œ : BOJ_1021๋ฒˆ ํšŒ์ „ํ•˜๋Š” ํ

๋ฌธ์ œ ์„ค๋ช…

Deque

1 ~ N๊นŒ์ง€์˜ ์ˆ˜๊ฐ€ ์–‘๋ฐฉํ–ฅ ์ˆœํ™˜ ํ์— ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ M ๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ๋ฐฉ์‹์ด ์ˆœํ™˜ ํ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์˜ ์›์†Œ๋งŒ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ˆœํ™˜์œผ๋กœ ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉฐ ์›์†Œ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๋กœ ์ด๋™์‹œ์ผœ ๋ฝ‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Œ๋ฅผ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


Solution

N์ด 50๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์Šจ ๋ฐฉ๋ฒ•์„ ์“ฐ๋“  ๊ตฌํ˜„๋งŒ ํ•ด๋‚ธ๋‹ค๋ฉด ์ •๋‹ต ์ฒ˜๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” deque์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค ์•ˆ์— ์–ด๋–ค ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๊ธฐ ์ „, ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๊ทธ ์ธ๋ฑ์Šค์™€ deque.size()๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธธ์ง€, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธธ์ง€ ์ •ํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Description

  • ์‹ค์ œ๋กœ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ณ , ์˜ˆ์ œ์—์„œ deque์˜ ์ „์ฒด ์‚ฌ์ด์ฆˆ์™€ ์ธ๋ฑ์Šค๋ฅผ ๋น„๊ตํ•ด๋ณด๊ณ  ์‹์„ ์งœ๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.

#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main(void) {
    int N, M;
    cin >> N >> M;
    deque<int> d;
    for (int i = 1; i <= N; i++) d.push_back(i);
    int result = 0;
    for (int i = 0; i < M; i++) {
        int now;
        cin >> now;
        int idx = 0;
        for (int i = 0; i < d.size(); i++) {
            if (now == d[i]) {
                idx = i + 1;
                break;
            }
        }
        if (idx-1 < d.size() - idx+1) {
            result += idx - 1;
            for (int i = 1; i < idx; i++) {
                int val = d.front();
                d.push_back(val);
                d.pop_front();
            }
            d.pop_front();
        }
        else {
            result += d.size() - idx+1;
            for (int i = 1; i <= d.size() - idx; i++) {
                int val = d.back();
                d.push_front(val);
                d.pop_back();
            }
            d.pop_back();
        }
    }
    cout << result << '\n';
    return 0;
}

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ํ›„์œ„ ํ‘œ๊ธฐ์‹(1918)  (0) 2022.03.10
[BOJ] ํ–‰์šด์˜ ๋ฐ”ํ€ด(2840)  (0) 2022.03.10
[BOJ] ์˜ค๋ฅด๋ง‰ ์ˆ˜(11057)  (0) 2022.03.09
[BOJ] ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ(1699)  (0) 2022.03.09
[BOJ] ๋™์ „ 2(2294)  (0) 2022.03.09