ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/3๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv3] : ํ‘œ ํŽธ์ง‘

Jaeguk 2022. 7. 7. 21:00
๋ฌธ์ œ ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/81303

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

ํ‘œ๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ 4๊ฐ€์ง€ ๋ช…๋ น์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด
  • ์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ ์•„์ด๋””์–ด

์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์–ด๋กœ๋Š” ์ปค์„œ์˜ ์œ„,์•„๋ž˜ ์ด๋™ , ํ•ด๋‹น ์นธ ์‚ญ์ œ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ญ์ œ๋œ ํ–‰ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ด๋ ‡๊ฒŒ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์‚ญ์ œ๋œ ํ–‰์„ ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•œ ๋ฑ์„ ์ด์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์ปค์„œ์˜ ์œ„์น˜๋ฅผ int๋กœ ๋‘๊ณ , ์ฃผ์–ด์ง„ ์ˆซ์ž๋งŒํผ ํ”Œ๋Ÿฌ์Šค ๋งˆ์ด๋„ˆ์Šค ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด ์ปค์„œ์˜ ์ด๋™์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 ํ•ด๋‹น์นธ์„ ์‚ญ์ œํ•  ๋•Œ๋ฉด deq[k] ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ (k๋Š” ์ปค์„œ ์œ„์น˜) ์‚ญ์ œํ•˜๊ณ  ์Šคํƒ์— ์‚ญ์ œํ•œ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ–ˆ๋‹ค.

์‚ญ์ œ๋œ ํ–‰์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ๋Š” ์Šคํƒ์˜ ๋งจ์œ„์— ์žˆ๋Š” ํ–‰์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ ๋ฑ์— ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ–ˆ๋‹ค.

 

์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •ํ™•๋„ํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ์ง€๋งŒ, ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ๋ชจ๋‘ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฐ›์•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ถ”๊ฐ€๋กœ ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ๋ฒ•์ด

๋ช…๋ น์–ด๋ฅผ ํŽผ์ณ๋†“๊ณ  ๋ดค์„ ๋•Œ, Z๋Š” ์•ž์—๋Š” ํ•ญ์ƒ 1๊ฐœ ์ด์ƒ์˜ C๊ฐ€ ์กด์žฌํ•œ๋‹ค. C๋ฅผ ํ•˜๊ณ  Z๋ฅผ ํ•˜๋ฉด ์‚ฌ์‹ค ๋‘ ๋ช…๋ น์–ด๊ฐ€ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค. ๋ช…๋ น์–ด๋กœ Z๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•ž์„  ๋ช…๋ น์–ด์ค‘์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ช…๋ น์–ด C์™€ ์ƒ์‡„์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ด๊ฒŒ ๋‹ต์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•˜๊ณ  ๊ณ„์† ์˜ค๋ฅ˜๊ฐ€๋‚ฌ๋‹ค.

 

  • ์ฐธ๊ณ ํ•œ ์•„์ด๋””์–ด

๊ณ„์† ์•ˆํ’€๋ ค์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป๊ฒŒ ํ’€์ด๋ฅผ ํ–ˆ๋‹ค ์ฐธ๊ณ ํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ–ˆ๋‹ค๊ณ ํ•ด์„œ ๋‚˜๋„ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ข‹์€์ 

1. ํ–‰ ์‚ญ์ œ๊ฐ€ ๊ฐ„ํŽธํ•˜๋‹ค.

2. ์‚ญ์ œ๋œ ํ–‰์„ ๋ณต๊ตฌํ•˜๊ธฐ์— ์ตœ์ €ํ™” ๋˜์–ด์žˆ๋‹ค.

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์ด์ „ ํ–‰๊ณผ, ๋‹ค์Œ ํ–‰์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™”์„ ๋•Œ

์ด์ „ ํ–‰๊ณผ ๋‹ค์Œ ํ–‰์ด ๋ˆ„๊ตฌ์˜€๋Š”์ง€๋ฅผ ๋ฐ”๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ „ ํ–‰์˜ next์™€ ๋‹ค์Œ ํ–‰์˜ prev๋ฅผ ๋ณต๊ตฌ์‹œํ‚ฌ ํ–‰์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ณต๊ตฌ๊ฐ€ ๋œ๋‹ค.

 
#include <bits/stdc++.h>
using namespace std;
 
struct Node{
    int val;
    Node* prev;
    Node* next;
    Node() {val = 0; prev = NULL; next = NULL;}
    Node(int t) { val = t; prev = NULL; next = NULL;}
};
 
string solution(int n, int k, vector<string> cmd) {
    string answer = "";
    Node* cursor = new Node(0);
    for(int i = 1; i<n; i++){
        cursor->next = new Node(i);
        cursor->next->prev = cursor;
        cursor = cursor->next;
    }
    for(int i = 0; i<n-k-1; i++)
        cursor = cursor->prev;
 
    stack<Node*> deleted;
    
    for(auto str : cmd){
        char command = str[0];
        if(command == 'U'){
            int cnt = stoi(str.substr(2));
            for(int i = 0; i<cnt; i++)
                cursor = cursor->prev;
        }
        else if(command == 'D'){
            int cnt = stoi(str.substr(2));
            for(int i = 0; i<cnt; i++)
                cursor = cursor->next;
        }
        else if(command == 'C'){
            deleted.push(cursor);
            if(cursor->next != NULL) cursor->next->prev = cursor->prev;
            if(cursor->prev != NULL) cursor->prev->next = cursor->next;
            if(cursor->next == NULL) cursor = cursor->prev;
            else cursor = cursor->next;
        }
        else if(command == 'Z'){
            Node* re = deleted.top();
            deleted.pop();
            if(re->next != NULL) re->next->prev = re;
            if(re->prev != NULL) re->prev->next = re;
        }
    }
    while(cursor->prev != NULL)
        cursor = cursor->prev;
    for(int i = 0; i<n; i++){
        if(cursor->val == i){
            answer += "O";
            if(cursor->next != NULL)
                cursor = cursor->next;
        }
        else
            answer += "X";
    }
    return answer;
}
cs

 

๋‚ด ๋ฐฉ์‹๋Œ€๋กœ ๋๊นŒ์ง€ ํ’€์–ด๋ณด๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ ๋‹ค์ˆ˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๊ฒŒ๋๋‹ค.

 

728x90