๐Ÿ• Baaaaaarking/0x04๊ฐ• - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

[BOJ][C++] ๋ฐฑ์ค€ 5397๋ฒˆ : ํ‚ค๋กœ๊ฑฐ

์„ ๋‹ฌ 2022. 1. 4. 23:13
๋ฐ˜์‘ํ˜•

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

 

5397๋ฒˆ: ํ‚ค๋กœ๊ฑฐ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ•์‚ฐ์ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 1,000,000) ๊ฐ•์‚ฐ์ด๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…

www.acmicpc.net

 

๋ฌธ์ œ

์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ›”์น˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ•์‚ฐ์ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์— ํ‚ค๋กœ๊ฑฐ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ๋ฉฐ์น ์„ ๊ธฐ๋‹ค๋ฆฐ ๋์— ์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์— ์ž…๋ ฅํ•˜๋Š” ๊ธ€์ž๋ฅผ ์–ป์–ด๋ƒˆ๋‹ค.

ํ‚ค๋กœ๊ฑฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅธ ๋ช…๋ น์„ ๋ชจ๋‘ ๊ธฐ๋กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ํ™”์‚ดํ‘œ๋‚˜ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ •ํ™•ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 

๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์—์„œ ์ž…๋ ฅํ•œ ํ‚ค๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๊ฐ•์‚ฐ์ด๋Š” ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•œ ํ‚ค๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋ฐฑ์ŠคํŽ˜์ด์Šค, ํ™”์‚ดํ‘œ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ•์‚ฐ์ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 1,000,000) ๊ฐ•์‚ฐ์ด๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, '-'๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ์ปค์„œ์˜ ๋ฐ”๋กœ ์•ž์— ๊ธ€์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๊ธ€์ž๋ฅผ ์ง€์šด๋‹ค. ํ™”์‚ดํ‘œ์˜ ์ž…๋ ฅ์€ '<'์™€ '>'๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ๋Š” ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ์›€์ง์ธ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ผ๋ถ€์ด๋‹ค. ๋ฌผ๋ก , ๋‚˜์ค‘์— ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์ง€์šธ ์ˆ˜๋Š” ์žˆ๋‹ค. ๋งŒ์•ฝ ์ปค์„œ์˜ ์œ„์น˜๊ฐ€ ์ค„์˜ ๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ปค์„œ ๋ฐ ์ปค์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” ํ•ญ์ƒ 0๋ณด๋‹ค ํฌ๋‹ค.

 

ํ’€์ด

#include <iostream>
#include <list>

using namespace std;

int main() {

    int n;
    cin >> n;

    while (n--){
        string input;
        cin >> input;
        
        list <char> L;
        auto cursor = L.begin();

        for(char c : input) {
            if(c == '<') {
                if(cursor != L.begin())
                    cursor--;
            }
            else if(c == '>') {
                if(cursor != L.end())
                    cursor++;
            }
            else if(c == '-') {
                if(cursor != L.begin()){
                    cursor--;
                    cursor = L.erase(cursor);
                }
            }
            else {
                L.insert(cursor, c);
            }
        }
        
        for(char c : L) cout << c;
        cout << "\n";
    }
    return 0;
}

 

TIL

list์˜ insert ์™€ erase ์˜ ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ๊ณ  ๊ฐ€์ง€ ์•Š์•„์„œ ์ดˆ๋ฐ˜์— ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋‹ค

 

insert ๋Š” iterator ์˜ ์•ž์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š”๊ฒƒ,

erase๋Š” iterator ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ,

 

์ฆ‰, ํŠน์ •์›์†Œ๋ฅผ insert ํ•˜๊ณ  ๋ฐฉ๊ธˆ insert ํ•œ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, iterator--๋ฅผ ํ•ด์•ผ ์˜ค๋ฅ˜์—†์ด ์›ํ•˜๋Š” ๋†ˆ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค

๋ฐ˜์‘ํ˜•