카테고리 없음

백준 5430 AC 파이썬 풀이

minjiwoo 2021. 12. 23. 22:09
728x90

크흡...! 첫시도는 시간초과 떴다 ㅋㅋㅋㅋ

#5430 AC
import sys

T = int(input())
for _ in range(T):
    command = sys.stdin.readline().rstrip()
    n = int(sys.stdin.readline())
    array = sys.stdin.readline().rstrip()[1:-1].split(",")
    flag = 0
    for cur in command:
        if cur == 'R':
            if len(array) == 0:
                flag = 1
                print('error')
                break
            array.reverse()
        else: # 'D'
            if len(array) == 0:
                flag = 1
                print('error')
                break
            array.pop(0)
    if flag == 0:
        print("["+",".join(array)+"]")

아 뭐가 문젠가 생각했는데 제한시간 1초면 아무래도 냅다 reverse()함수를 쓰면 안될거같다... 언제 뒤집고 그러는가..!! 
R의 갯수가 홀수일때랑 짝수일때 나눠서 R이짝수이면 reverse()안쓰고 바로 그냥 출력하고 

R의 개수가 홀수이면 reverse()된 (뒤집어진) 배열을 출력해주면 될거같다 

 

#5430 AC
import sys


T = int(input())
for _ in range(T):
    command = sys.stdin.readline().rstrip()
    n = int(sys.stdin.readline())
    array = sys.stdin.readline().rstrip()[1:-1].split(",")
    flag = 0
    count = 0
    for cur in command:
        if cur == 'R':
            count += 1
        else: # 'D'
            if len(array) < 1:
                flag = 1
                print('error')
                break
            array.pop(0)
    if flag == 0:
        if count%2 == 0:
            print("["+",".join(array)+"]")
        else:
            array.reverse()
            print("[" + ",".join(array) + "]")

그렇지만 이 코드로도 시간초과를 받았다 ㅋㅋㅋ 

간과한 점은 reverse되어야 할 때인지 아닐때인지를 D 명령이 나올 때에도 해주어야 한다는 것이다 !! 그래야 queue가 있으면 pop()을 할지 popleft()를 할지 알 수 있다. 

또한 n 이 0일때의 예외처리도 해주어야 한다. 왜 예외처리를 해주어야 하는걸까 ? 

array = sys.stdin.readline().rstrip()[1:-1].split(",")

여기서 []가 input일때 말이 안되기는 하는데.. 이런 경우 직접 찍어보면

 

잘찍히는것 같은데..? 라고 생각했으나

print(len(queue))

를 하면 queue의 길이가 1이라고 나온다 그러면 배열이 [] 이고 D명령이 나오는 경우를 처리할 수 없다.  --> 문제에서는 4번째 예시 

아하ㅏ 그래서 queue = []라고 초기화를 다시해주나보다..

#5430 AC
import sys
from collections import deque

T = int(input())
for _ in range(T):
    command = sys.stdin.readline().rstrip()
    n = int(sys.stdin.readline())
    array = sys.stdin.readline().rstrip()[1:-1].split(",")
    queue = deque(array) # list -> queue type
    flag = 0
    count = 0

    if n == 0:
        queue = []

    for cur in command:
        if cur == 'R':
            count += 1
        elif cur == 'D':
            if len(queue) < 1:
                flag = 1
                print("error")
                break
            else:
                if count % 2 == 0:
                    queue.popleft()
                else:
                    queue.pop()
    if flag == 0:
        if count%2 == 0:
            print("["+",".join(queue)+"]")
        else:
            queue.reverse()
            print("[" + ",".join(queue) + "]")
728x90