[Algo/Python] 5430. AC

Sanghyun Park·2022년 5월 26일
0

Algo

목록 보기
3/3

000. 문제


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



001. 회고


001.1. 시간 초과

해당 문제는 문제에서 요구하는 연산을 그대로 구현하면 해결할 수 있다. 다만, "뒤집기" 연산을 매번 수행하면 시간 초과가 발생하기 때문에 입력받은 "뒤집기" 연산의 개수를 집계하였고, 최종 반환값에 이를 반영하였다. 집계된 횟수가 홀수라면 "뒤집기" 연산을 적용하여 처리하였고, 반대로 짝수라면 기존 리스트를 그대로 사용하였다.

001.2. 버리기 연산

문제에서 제시한 "버리기" 연산은 맨 앞의 원소를 버리는 작업이다. 만약 "뒤집기" 연산을 매번 수행한다면 맨 앞의 원소를 제거하는 것만 신경 쓰면 된다. 하지만, 앞서 말했듯이 "뒤집기" 연산은 최종 반환값을 조정할 때만 적용했기에 집계된 "뒤집기" 연산 개수의 홀짝을 바탕으로 맨 앞 혹은 맨 뒤의 원소를 제거하였다. 이를 편하게 수행하기 위해 deque를 사용하였다.

001.3. 출력 형식

부끄럽지만 출력 형식을 제대로 확인하지 않아 통과하는 데 오랜 시간이 걸렸다. 문제에서 요구하는 출력 형식을 살펴보면, 모든 문자가 공백 없이 붙어있다...😅 단순히 결과 리스트를 출력하면 안 되고, 문자열 메서드인 join을 사용해서 출력 형식을 정확하게 맞춰줘야 했다.



002. 코드


import sys
from collections import deque


def perform(orders, target):
    r_cnt = 0

    for order in orders:
        # "뒤집기" 연산 횟수 집계
        if order == 'R':
            r_cnt += 1
        elif order == 'D':
            if len(target) == 0:
                return 'error'

            # 뒤집어져 있다면 맨 뒤의 원소 제거, 그렇지 않다면 맨 앞의 원소 제거
            if r_cnt % 2:
                target.pop()
            else:
                target.popleft()

    # 출력 형식 정확하게 맞추기
    return "[" + ",".join(reversed(target)) + "]" if r_cnt % 2 else "[" + ",".join(target) + "]"


T = int(sys.stdin.readline().rstrip())
for _ in range(T):
    P = list(sys.stdin.readline().rstrip())
    N = int(sys.stdin.readline().rstrip())
    ARR = sys.stdin.readline().rstrip()[1:-1].split(',')
    if N == 0:
        ARR = []

    print(perform(P, deque(ARR)))


End

profile
문맥을 고려한 커뮤니케이션을 할 수 있도록 다양한 공부를 하고 있는 FE 개발자 박상현입니다!!

0개의 댓글