[백준] 에디터(Python) - Stack

2022. 3. 26. 22:47·Algorithms 💻/BAEKJOON
반응형

# 문제 

 

# 입출력 

 

# Idea

스택을 이용한 문제다. 이 문제의 특징은 주어진 시간제한이 매우 짧기 때문에, insert와 pop(i) 등을 사용해서는 시간복잡도가 커지기 때문에 사용할 수 없다. (시간초과가 뜬다) 그래서 pop()와 append()만을 이용해 스택으로 구현해야한다. 

그렇다면 이 문제를 어떻게 스택으로 구현하느냐? 필자는 처음에 각각의 L, D, B, P 경우를 하나하나 스택으로 구현할 수 있도록 경우를 생각했는데, 이럴 경우에 예외처리가 너무 복잡하고 까다로워져서 난항을 겪었다. 

따라서 이 문제의 핵심 아이디어는 커서의 위치를 기준으로 데이터를 두개의 스택으로 나누는 것이다! 처음에는 하나의 스택에 데이터를 모두 몰아넣는다. 그리고 앞서 언급한 pop과 append의 스택 연산을 이용해 상황에 맞게 원소를 넣고 빼는 것이다.
이러한 상황 중 커서를 왼쪽으로 이동하는 L 연산을 그림으로 나타내면 다음과 같다. 

 

 

# Code

"""
에디터
  - 스택으로 구현해보기 (선입후출) > pop(i)와 insert(i)가 아니라 pop()과 append(v)를 이용할 것 !
  - 커서를 중심으로 스택을 2개로 나눈다. 
"""

# 스택 2개로 시작 
st1 = list(input())
st2 = []
n = int(input())

for _ in range(n):
  com = input().split()

  if com[0] == 'L':
    if st1 :           # st1 비어있지 않으면 (예외처리 이렇게 간단하게 가능...)
      st2.append(st1.pop())
  
  elif com[0] == 'D':
    if st2:
      st1.append(st2.pop())

  elif com[0] == 'B':
    if st1:
      st1.pop()

  else:
    st1.append(com[1])

  print('st1 : ', st1)
  print('st2 : ', st2)

st1.extend(reversed(st2))    # 두 stack을 합쳐준다 
print(''.join(st1))
반응형
저작자표시 (새창열림)

'Algorithms 💻 > BAEKJOON' 카테고리의 다른 글

[백준] N-Queens 문제(Python) - 백트래킹  (2) 2022.04.27
[백준] 1,2,3 더하기(Python) - 백트래킹 & 1차원 dfs 탐색  (0) 2022.04.20
[백준] 로또(Python) - 백트래킹 & 1차원 dfs 탐색  (0) 2022.04.07
[백준] 캥거루 세마리2 (Python) - Greedy  (0) 2022.01.08
[백준] 우유축제 (Python) - Greedy  (0) 2022.01.08
'Algorithms 💻/BAEKJOON' 카테고리의 다른 글
  • [백준] 1,2,3 더하기(Python) - 백트래킹 & 1차원 dfs 탐색
  • [백준] 로또(Python) - 백트래킹 & 1차원 dfs 탐색
  • [백준] 캥거루 세마리2 (Python) - Greedy
  • [백준] 우유축제 (Python) - Greedy
당니이
당니이
씩씩하게 공부하기 📚💻
  • 당니이
    다은이의 컴퓨터 공부
    당니이
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Achieved 👩🏻 (14)
        • 생각들 (2)
        • TIL (6)
        • Trial and Error (1)
        • Inspiration ✨ (0)
        • 미국 박사 준비 🎓 (1)
      • Computer Vision💖 (39)
        • Basic (9)
        • Video (5)
        • Continual Learning (7)
        • Generative model (2)
        • Domain (DA & DG) (5)
        • Multimodal (8)
        • Multitask Learning (1)
        • Segmentation (1)
        • Colorization (1)
      • RL 🤖 (1)
      • Autonomous Driving 🚙 (11)
        • Geometry (4)
        • LiDAR 3D Detection (1)
        • Trajectory prediction (2)
        • Lane Detection (1)
        • HDmap (3)
      • Linux (15)
      • PyTorch👩🏻‍💻 (10)
      • Linear Algebra (2)
      • Python (5)
      • NLP (10)
        • Article 📑 (1)
      • Algorithms 💻 (22)
        • Basic (8)
        • BAEKJOON (8)
        • Programmers (2)
      • ML (1)
        • 통계적 머신러닝(20-2) (1)
      • SQL (3)
      • 기초금융 💵 (1)
  • 블로그 메뉴

    • 홈
    • About me
  • 링크

    • 나의 소박한 github
    • Naver 블로그
  • 공지사항

  • 인기 글

  • 태그

    백준
    domain generalization
    domain adaptation
    Python
    Incremental Learning
    리눅스
    코딩테스트
    자료구조
    백트래킹
    continual learning
    알고리즘
    til
    CL
    CV
    conda
    LLM
    dfs
    Linux
    NLP
    pytorch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
당니이
[백준] 에디터(Python) - Stack
상단으로

티스토리툴바