[๋ฐฑ์ค€] 5397 ํ‚ค๋กœ๊ฑฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

2024. 8. 24. 18:38ยท๐Ÿ’ป Algorithms/๋ฐฑ์ค€

[ ๋ฌธ์ œ๋งํฌ ]

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

 

๐Ÿšฉ ์กฐ๊ฑด

  1. ํ‚ค๋กœ๊ฑฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅธ ๋ช…๋ น์„ ๋ชจ๋‘ ๊ธฐ๋กํ•จ
  2. ๋ฐฑ์ŠคํŽ˜์ด์Šค : "-" / ์ปค์„œ์˜ ๋ฐ”๋กœ ์•ž์— ๊ธ€์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๊ธ€์ž๋ฅผ ์ง€์›€
    ํ™”์‚ดํ‘œ : "<", ">" / ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ์›€์ง์ž„
    ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ผ๋ถ€
  3. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด๋ผ

 

 

๐Ÿšฉ ์ ‘๊ทผ

ํ™”์‚ดํ‘œ๋ฅผ ํ†ตํ•ด ์ปค์„œ๋ฅผ ์ด๋™ํ•˜๊ณ  ๊ทธ ์ง€์ ์—์„œ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์ด๋ค„์ ธ์•ผ ํ•จ -> ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜์ž.

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, STL list๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ๊ตฌ์กฐ์ฒด

2) STL list ([์ฐธ๊ณ ] ํ‹ฐ์Šคํ† ๋ฆฌ)

- ์‚ฝ์ž…

  • push_front(element) : ๋ฆฌ์ŠคํŠธ ๋งจ ์•ž์— ์›์†Œ ์ถ”๊ฐ€
  • push_back(element) : ๋ฆฌ์ŠคํŠธ ๋งจ ๋’ค์— ์›์†Œ ์ถ”๊ฐ€
  • insert(iterator, element) : iterator๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ถ€๋ถ„์˜ ์•ž์— ์›์†Œ ์ถ”๊ฐ€

 

- ์‚ญ์ œ

  • pop_front() : ๋ฆฌ์ŠคํŠธ ๋งจ ์•ž์— ์›์†Œ ์‚ญ์ œ
  • pop_back() : ๋ฆฌ์ŠคํŠธ ๋งจ ๋’ค์— ์›์†Œ ์‚ญ์ œ
  • erase(iterator) : iterator๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ถ€๋ถ„์˜ ์›์†Œ ์‚ญ์ œ

 

- ์กฐํšŒ

  • front() : ์ฒซ๋ฒˆ์งธ ์›์†Œ ๋ฐ˜ํ™˜
  • back() : ๋งˆ์ง€๋ง‰ ์›์†Œ ๋ฐ˜ํ™˜
  • *iterator : iterator๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ์— ์ ‘๊ทผ

 

 

๐Ÿšฉ ์‹œํ–‰์ฐฉ์˜ค

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค..

1. ์ปดํŒŒ์ผ ์—๋Ÿฌ

 for (int j = 0; j < L.length(); j++) {
 	string next = L[j];

์œ„ ๋ถ€๋ถ„์—์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ , ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • L.length()๋Š” size_t ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ด๋Š” unsigned int์ด๋ฏ€๋กœ int์™€ ํฌ๊ธฐ ๋น„๊ต๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์•ž์— (int)๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด ์บ์ŠคํŠธํ•ด์ฃผ๋ฉด ๋œ๋‹ค. => ๊ทผ๋ฐ vs๋กœ ๋Œ๋ ค๋ณด๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐฑ์ค€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” GCC๋ผ ๊ทธ๋Ÿฐ๋“ฏํ•˜๋‹ค.. ๊ทผ๋ฐ ๋˜ ์ด์ƒํ•œ ๊ฑด vector.size()๋„ size_t ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ๋˜‘๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์ด๊ฑด ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๋ญ์ง€?
    ๊ทธ๋ฆฌ๊ณ  L.length()์™€ L.size()๋Š” ๋™์ผํ•˜๋‹ค. vector, map ๋“ฑ์˜ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด size๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, string์˜ ๊ธธ์ด์— ๊ด€ํ•ด ์ƒ๊ฐํ•  ๋•Œ ์‚ฌ๋žŒ๋“ค์ด length๋ฅผ ์‰ฝ๊ฒŒ ๋– ์˜ฌ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ง๊ด€์„ฑ์„ ์œ„ํ•ด ๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ length๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  • L[j]๋Š” char ํƒ€์ž…์ด๋ฏ€๋กœ, string ํƒ€์ž…์— ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ string(1,L[j])๋กœ ์ˆ˜์ •ํ•˜์—ฌ char ํƒ€์ž…์ธ L[j]๋ฅผ ๊ธธ์ด๊ฐ€ 1์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ next์— ํ• ๋‹นํ•˜์˜€๋‹ค.

 

2. ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ (Segfault)

์ž…๋ ฅ์œผ๋กœ "-"๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฌธ์ž๋ฅผ ๋ฐ›์„ ๋•Œ, list์˜ erase, insert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ ์ด ๋ถ€๋ถ„์—์„œ iterator์„ ๊ฑด๋“œ๋ฆฌ๋Š” ๊ฒŒ ์–ด๋ ค์› ๋‹ค.

else if (next == "-") {
    if (iter != sl.begin())
        sl.erase(--iter);
}
else {
    sl.insert(iter, next);
}

์ฒ˜์Œ์—๋Š” ์œ„์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” erase์— ์žˆ๋‹ค. erase๋Š” ์‚ญ์ œ๋œ ์š”์†Œ ๋’ค์˜ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด๋ฅผ iter๋กœ ๋ฐ›์•„์ฃผ์ง€ ์•Š์œผ๋ฉด iter์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

 

๐Ÿ’ป ์ฝ”๋“œ (C++)

#include <iostream>
#include <list>
#include <string>
using namespace std;

list<string> sl;
list<string>::iterator iter = sl.begin();
int main() {
    
    int x;
    string L;

    cin >> x;
    for (int i = 0; i < x; i++) {
        cin >> L;
        for (int j = 0; j < (int)L.size(); j++) {
            string next = string(1, L[j]);

            if (next == "<") {
                if (iter != sl.begin())
                    iter--;
            }
            else if (next == ">") {
                if (iter != sl.end())
                    iter++;
            }
            else if (next == "-") {
                if (iter != sl.begin())
                    iter = sl.erase(--iter);
            }
            else {
                sl.insert(iter, next);
            }
        }
        for (iter = sl.begin(); iter != sl.end(); iter++) {
            cout << *iter;
        }
        cout << "\n";
        sl.clear();
        iter = sl.begin();
    }
 }

'๐Ÿ’ป Algorithms > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 1181 ๋‹จ์–ด ์ •๋ ฌ - ์ •๋ ฌ  (0) 2024.08.25
[๋ฐฑ์ค€] 10814 ๋‚˜์ด์ˆœ ์ •๋ ฌ - ์ •๋ ฌ  (0) 2024.08.24
[๋ฐฑ์ค€] 1260 DFS์™€ BFS - dfs, bfs  (0) 2024.08.20
[๋ฐฑ์ค€] 2164 ์นด๋“œ2 - ํ  (0) 2024.08.19
[๋ฐฑ์ค€] 1992 ์ฟผ๋“œํŠธ๋ฆฌ - ์žฌ๊ท€ํ•จ์ˆ˜  (0) 2024.08.19
'๐Ÿ’ป Algorithms/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 1181 ๋‹จ์–ด ์ •๋ ฌ - ์ •๋ ฌ
  • [๋ฐฑ์ค€] 10814 ๋‚˜์ด์ˆœ ์ •๋ ฌ - ์ •๋ ฌ
  • [๋ฐฑ์ค€] 1260 DFS์™€ BFS - dfs, bfs
  • [๋ฐฑ์ค€] 2164 ์นด๋“œ2 - ํ
์ ๋„
์ ๋„
  • ์ ๋„
    ๋„์ 
    ์ ๋„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (30)
      • ๐Ÿ’ป Algorithms (28)
        • ๋ฐฑ์ค€ (22)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
      • ๐Ÿ”Ž Deep Learning (0)
      • ๐Ÿ’ฅ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (1)
      • ๐Ÿ•น Unity (1)
      • ๐Ÿฅ” ์ž‰ํ…… (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • Blog
    • Github
    • Velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
์ ๋„
[๋ฐฑ์ค€] 5397 ํ‚ค๋กœ๊ฑฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”