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

[BOJ G5][C++] ๋ฐฑ์ค€ 5430๋ฒˆ: AC

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

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

 

5430๋ฒˆ: AC

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์„ ์˜์ด๋Š” ์ฃผ๋ง์— ํ•  ์ผ์ด ์—†์–ด์„œ ์ƒˆ๋กœ์šด ์–ธ์–ด AC๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. AC๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด ์–ธ์–ด์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜ R(๋’ค์ง‘๊ธฐ)๊ณผ D(๋ฒ„๋ฆฌ๊ธฐ)๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ R์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜์ด๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•จ์ˆ˜๋Š” ์กฐํ•ฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "AB"๋Š” A๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์— ๋ฐ”๋กœ ์ด์–ด์„œ B๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "RDD"๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋‹ค์Œ ์ฒ˜์Œ ๋‘ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. T๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. p์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ n ≤ 100,000)

๋‹ค์Œ ์ค„์—๋Š” [x1,...,xn]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ xi ≤ 100)

์ „์ฒด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง€๋Š” p์˜ ๊ธธ์ด์˜ ํ•ฉ๊ณผ n์˜ ํ•ฉ์€ 70๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๋‹ค์Œ ์ค„์—๋Š” [x1,...,xn]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ xi ≤ 100)

์ด ๋ฌธ์ œ.. ๊ณ„์‚ฐ๊ณผ์ •๋ณด๋‹ค ์ž…๋ ฅ์ด ํ›จ์”ฌ ๋” ๋‚œํ•ญ์ด์—ˆ๋‹ค ใ… ใ… 

์ถœ๋ ฅ๋„ ์•„๋‹ˆ๊ณ  ์ž…๋ ฅ์„ ์ด๋ ‡๊ฒŒ ํ˜•์‹ ๋งŒ๋“ค์–ด์„œ ์ฃผ๋Š” ๊ฒฝ์šฐ๋Š” ์ •๋ง ์ฒ˜์Œ ๋ด„ ์–ด์ฉ์ง€ ์ถœ์ฒ˜๊ฐ€ ์œ ๋Ÿฝ์ด๋”๋ผ (?)

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋ฐฐ์—ด input์„ string ์œผ๋กœ ๋ฐ›๊ณ  ํ™€์ˆ˜๋ฒˆ์งธ char ๋งŒ ๋ฑ์— ์ง‘์–ด๋„ฃ์œผ๋ฉด ๋˜๊ฒŸ์ง€ ๋ผ๋Š” ์•ˆ์ผํ•œ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค

       // string ๋ฑ์— ์ €์žฅํ•˜๊ธฐ
        for(int i=0; i<n; i++) {
            if(i%2 == 0) continue;
            else d.push_back(input[i] - '0');
        }

์‹ค๋กœ ๋ฉ์ฒญํ•œ ์ƒ๊ฐ ๊ทธ ์ž์ฒด

๋‘์ž๋ฆฌ์ˆ˜ ์ด์ƒ์€ ์–ด๋–ป๊ฒŒ ํ• ๊ฑด๋ฐ......

 

๊ทธ๋ฆฌํ•˜์—ฌ ์ •๋ง์ •๋ง ๊ท€์ฐฎ์•˜์ง€๋งŒ ๋…ธ๊ฐ€๋‹ค๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค

์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด string์œผ๋กœ ์ €์žฅํ•ด์„œ (3 ๋‹ค์Œ์— 2๊ฐ€ ๋‚˜์˜ค๋ฉด ์ˆœ์„œ๋Œ€๋กœ "32" ๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๊ฐ–๊ฒŒ๋จ)

์ด string์„ int ๋กœ ๋ฐ”๊ฟ”์„œ ๋ฑ์— ์ €์žฅํ•ด์คฌ๋‹ค

        // string ๋ฑ์— ์ €์žฅํ•˜๊ธฐ
        string tmp;
        for(int i=0; i<input.length(); i++) {
            // 1. ์ฒซ๋ฒˆ์งธ ๋Œ€๊ด„ํ˜ธ๋Š” ๋ฌด์‹œ
            if(input[i] == '[') continue;

            // 3. ์ฝค๋งˆ๋‚˜ ๋งˆ์ง€๋ง‰ ๋Œ€๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด
            if((input[i] == ',' || input[i] == ']') && !tmp.empty()) {
                d.push_back(stoi(tmp));  //  tmp๊ฐ’์„ int๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฑ์— ์ถ”๊ฐ€ํ•ด์คŒ
                tmp.clear();  // ๊ทธ๋ฆฌ๊ณ  tmp ์ดˆ๊ธฐํ™”
            }
            // 3. ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์ผ๋‹จ tmp์— ๋ฌธ์ž์—ด๋กœ ์ €์žฅ
            else tmp += input[i];
        }

 

stoi๋Š” ์ด๋ฒˆ์— ์ฒ˜์Œ ์•Œ์•˜๋‹ค

https://zetawiki.com/wiki/C%2B%2B_string%EC%9D%84_int%EB%A1%9C_%EB%B3%80%ED%99%98

 

C++ string์„ int๋กœ ๋ณ€ํ™˜ - ์ œํƒ€์œ„ํ‚ค

๋‹ค์Œ ๋ฌธ์ž์—ด ํฌํ•จ...

zetawiki.com

 


์ด์ œ ๋“œ๋””์–ด ์ž…๋ ฅ์„ ๋ฐ›์•˜๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ’€์–ด๋ณด์ž

 

R์˜ reverse ๋™์ž‘์ด ํฌ์ธํŠธ๋‹ค

์ด๊ฑธ ์ง„์งœ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•˜๊ณ .. ์ด๋Ÿฐ์‹์œผ๋กœ ์ง„์งœ "reverse" ํ•  ์ƒ๊ฐ์„ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค

๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผํ–‰...

 

์–‘๋ฐฉํ–ฅ์ธ ๋ฑ์„ ์ด์šฉํ•˜๋ฉด ์˜์™ธ๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ,

reverse ์ƒํƒœ๋ฅผ bool (๋˜๋Š” int) ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉด์„œ

reverse ์ƒํƒœ์ผ๋•Œ๋Š” ๋’ค์—๊ฒƒ์„ pop, reverse ์ƒํƒœ๊ฐ€ ์•„๋‹๋•Œ๋Š” ์•ž์˜๊ฒƒ์„ pop ํ•ด์ฃผ๋ฉด 

๊ตณ์ด ๊ฑฐ๊พธ๋กœ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๊ฑฐ๊พธ๋กœ ๋งŒ๋“  "์ฒ™" ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

 

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

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

using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int t;
    cin >> t;
    while(t--){
        deque<int> d;
        string p, input;
        int n;
        bool isReversed = false, isError = false;
        cin >> p >> n >> input;
        
        // string ๋ฑ์— ์ €์žฅํ•˜๊ธฐ
        string tmp;
        for(int i=0; i<input.length(); i++) {
            // 1. ์ฒซ๋ฒˆ์งธ ๋Œ€๊ด„ํ˜ธ๋Š” ๋ฌด์‹œ
            if(input[i] == '[') continue;

            // 3. ์ฝค๋งˆ๋‚˜ ๋งˆ์ง€๋ง‰ ๋Œ€๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด
            if((input[i] == ',' || input[i] == ']') && !tmp.empty()) {
                d.push_back(stoi(tmp));  //  tmp๊ฐ’์„ int๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฑ์— ์ถ”๊ฐ€ํ•ด์คŒ
                tmp.clear();  // ๊ทธ๋ฆฌ๊ณ  tmp ์ดˆ๊ธฐํ™”
            }
            // 3. ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์ผ๋‹จ tmp์— ๋ฌธ์ž์—ด๋กœ ์ €์žฅ
            else tmp += input[i];
        }
        
        // ํ•จ์ˆ˜ p ์ˆ˜ํ–‰ํ•˜๊ธฐ
        for(int i=0; i<p.size(); i++){
            if(p[i] == 'R') isReversed = !isReversed;
            else if(p[i] == 'D'){
                // ๋ฑ์ด ๋น„์–ด์žˆ์œผ๋ฉด error
                if(d.empty()){
                    isError = true;
                    break;
                }
                // ๋’ค์ง‘๊ธฐ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ์— ๋งž๊ฒŒ ๋ฒ„๋ฆฌ๊ธฐ
                if(isReversed) d.pop_back();
                else d.pop_front();
            }
        }
        
        // ๋ฑ์„ ํ˜•์‹์— ๋งž๊ฒŒ ์ถœ๋ ฅ
        if(isError)
            cout << "error\n";
        else if (d.empty())
            cout << "[]\n";
        else {
            if(isReversed) {
                cout << "[";
                for(int j=d.size()-1; j>0; j--) cout << d[j] << ",";
                cout << d[0] << "]\n";
            } else {
                cout << "[";
                for(int j=0; j<d.size()-1; j++) cout << d[j] << ",";
                cout << d[d.size()-1] << "]\n";
            }
        }
    }
    
    return 0;
}

/*
 */

tmi ) ์ตœ๊ทผ ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์žˆ๋Š”๋ฐ... ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋œ๋‹ค๊ณ ๋Š” ํ•˜๋Š”๋ฐ.. ์กธ๋ฆฌ๋‹ˆ๊นŒ.. ๋ด์ค˜..์š”.. ์ œ๋ฐœ..

 


 

๋ณธ ๊ณ„์‚ฐ์ด ๋๋‚ฌ๋‹ค๋ฉด.. ๋ฌผ๋ก  ์ถœ๋ ฅ๋„ ๊ณ ๋‚œ์˜ ์—ฐ์†์ด์ง€๋งŒ..

์ž…๋ ฅ๋งŒํผ ์งœ์ฆ๋‚˜์ง€๋Š” ์•Š๋‹ค. 

 

๋งŒ์•ฝ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋–ด๋Š”๋ฐ ์™œ์ธ์ง€ ์ด์œ ๊ฐ€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด

์•„๋งˆ ์ถœ๋ ฅ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„๊ฒƒ์ด๋‹ค (๊ฒฝํ—˜๋‹ดใ…‹)

์•„๋ž˜ ๊ฒฝ์šฐ๋“ค์„ ๋”ฐ์ ธ๋ณด์ž

 

(1) ์ถœ๋ ฅ๋„ reverse ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅํ–ˆ๋Š”๊ฐ€

(2) ๊ณ„์‚ฐ๊ณผ์ •์—์„œ error ์ธ ๊ฒฝ์šฐ๋„ ์ž˜ ์ฒ˜๋ฆฌํ•ด์„œ ์ถœ๋ ฅํ–ˆ๋Š”๊ฐ€

(3) ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„๋•Œ [] ๋กœ ์ถœ๋ ฅ๋˜๋Š”๊ฑฐ ๋งž๋Š”๊ฐ€

 

ํŠนํžˆ 3๋ฒˆ..

error ๊ฐ€ ๋œจ๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ

๊ทธ๋ƒฅ ์ž‘์—… ์ž˜ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ ๋ฐฐ์—ด์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋‚จ์•„์žˆ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค

์ฒ˜์Œ์— ๊ทธ๊ฑฐ ํ˜ผ๋™ํ•ด์„œ ๋‹ต์ด ์•ˆ๋‚˜์™”๋‹ค..

 

 

๋ฐ˜์‘ํ˜•