Even Idiots Can Make Game

백준 1406 S2 에디터

Date/Lastmod
Section
PS
Title
백준 1406 S3 에디터
Ps-Tags
Solved
03-04/25

#1 풀이 접근 과정

#1 코드

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <string>
#include <list>

using namespace std;

#define CMD_I 0
#define ARG_I 2

int main() {
  string str; cin >> str; // [a-z], [100'000]
  int M; cin >> M; // [1, 500'000]

  cin.ignore(); 

  list<char> l_str(str.begin(), str.end());

  // 커서는 자기가 가리키는 문자 바로 앞의 위치에 있음
  auto cursor = l_str.end();

  for (int i = 0; i < M; ++i) {
    string  i_cmd; getline(cin, i_cmd);

    switch (i_cmd[CMD_I]) {
      case 'L': // 커서를 왼쪽으로 한 칸 옮기기
        if (cursor != l_str.begin()) {
          cursor = prev(cursor);
        }
        break;

      case 'D': // 커서를 오른쪽으로 한 칸 옮기기
        if (cursor != l_str.end()) {
          cursor = next(cursor);
        }
        break;

      case 'B': // 커서 왼쪽에 있는 문자 삭제
        if (cursor != l_str.begin()) {
          cursor = l_str.erase(prev(cursor));
        }
        break;

      case 'P': // 왼쪽에 인자로 전달된 문자 추가
          cursor = next(l_str.insert(cursor, i_cmd[ARG_I]));
        break;
    }
  }

  for (char c: l_str) cout << c;
}

#1 기타 문법적 사항

#2 반복자 이동

#2 반복자를 사용한 C++ 컨테이너의 삽입과 삭제

#2 한 줄 입력

#1 다른 풀이?

#1 참고 문헌


  1. 그냥 컨테이너 상관없이 무효화 될 가능성이 있는 모든 연산에 대해서 방어적으로 프로그래밍 하는 것이 낫다고 느껴짐. ↩︎

comments powered by Disqus