[백준]5430번 AC - 덱

2021. 1. 25. 16:11·SW개발/코딩테스트

 

from collections import deque
import sys

n = int(sys.stdin.readline())
for i in range(n):
    command = sys.stdin.readline().strip()  # 명령어
    length = int(sys.stdin.readline())
    if length == 0:
        input()
        deque_ = deque([])
    else:
 		# 대괄호는 빼고 입력 받기
        deque_ = deque( sys.stdin.readline()[1:-2].strip().split(','))

    #print(deque_)
    flag = 1 # 뒤집기 체크
    flag2 = 1 # 에러 체크
    for i in range(len(command)):
        if command[i] == 'R':
            flag = flag * -1
        else: # D인 경우
            if length == 0:
                flag2 = flag2 * -1
                break
            if flag == -1:
                deque_.pop()
                length = length -1 # len()함수 대신 length 변수로 시간 절약
            else:
                deque_.popleft()
                length = length -1
    if flag2 == -1:
        print("error")
    else:
        deque_ = deque(list(deque_))
        if flag == -1:
            deque_.reverse()

        print("[", end="")
        print(",".join(deque_), end="")
        print("]")

 

코드 설명

반복되는 테스트 케이스의 수를 입력 받는다.(n) n번 동안 반복문을 수행한다.

먼저 배열에 들어있는 수의 개수를 입력 받는데, 그 수가 0 이라면 빈 배열 0이 아니라면 문자열에서 []를 빼고 입력 받고 ',' 문자를 기준으로 숫자만을 분리시켜 저장한다.

R과 D 명령을 위한 flag 1, 2 변수도 선언하여 준다. 만약 R(뒤집기) 명령일 경우 배열을 전부 뒤집는 대신 flag1 를 -1 로 설정하여 준다.

D 명령일 경우 길이가 0 이라면 에러 체크를 위해 flag2 역시 -1로 설정하여 준다. 만약 flag1 == -1 즉 배열을 한번 뒤집은 상태라면 뒤에서 부터 원소를 제거하여 준다, 그렇지 않다면 앞에서 부터 원소를 제거한다.

그 후 flag2 값 체크를 통해 에러가 발생했다면 error 메시지를 출력하고 그렇지 않다면 덱을 리스트로 바꾸어 준 후 flag1 == -1 상태라면 배열을 뒤집어 준다. 형식에 맞게 출력한다.

 

Point : R 명령의 경우 실제로 배열을 reverse 해주면 시간이 매우 오래 걸리게 된다. 그 대신 flag1 변수를 통해 배열이 뒤집어진 상태인지를 체크해주는 방식으로 시간을 절약할 수 있다. 이 값이 양수라면 그대로의 형태 음수라면 뒤집어진 형태이다. 따라서 D 연산을 pop() 할 때 앞에서 할지 뒤에서 할지에 대한 결정을 해줄 수 있다. 

또한, 에러가 발생한 경우 역시 체크를 하기 위해 flag2 변수도 이용하여 준다.

마지막 출력을 편하게 하기 위해 덱 구조를 list 로 바꾸어 준 후 형식에 맞게 출력한다.

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[백준]11047번 동전0 - 그리디  (0) 2021.01.27
[백준]2839번 설탕 배달 - 그리디  (0) 2021.01.26
[백준]1021번 회전하는 큐 - 덱  (0) 2021.01.24
[백준]10866번 덱 - 덱  (0) 2021.01.23
[백준]1966번 프린터 큐 - 큐  (0) 2021.01.18
'SW개발/코딩테스트' 카테고리의 다른 글
  • [백준]11047번 동전0 - 그리디
  • [백준]2839번 설탕 배달 - 그리디
  • [백준]1021번 회전하는 큐 - 덱
  • [백준]10866번 덱 - 덱
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    플레이스토어
    음식
    g
    트리 #AVL #알고리즘 #자료구조
    오픈소스
    Contributor
    컨트리뷰터
    어플리케이션
    배달비 공유
    라이프 스타일
    배달
    배공파용
    django
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[백준]5430번 AC - 덱
상단으로

티스토리툴바