5430 AC _python

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

     

    5430번: AC

    각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

    www.acmicpc.net

    AC? 에이씨?? 한글로치면 ㅁㅊ??

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    문제 접근

    문제의 의도는 reverse를 쓰지말고 풀어라! 라는 문제.

    만약 p는 DDDDD...(10만개) 이고, n=100,000이라면 reverse를 사용해서 D를 처리하는 경우

    100,000*100,000으로 100억번 연산 무조건 시간초과다.

    그러면 reverse를 쓰지않고 뒤집는 방법은. 뒤집은 것처럼 연산하는 방법 left와 right를 확인하는 방법이다.

    left에서도 빼고 right에서도 빼려면 데크를 사용하면 된다.

    그리고 bool로 left와 right를 구분해서 푸는 방법으로 해결했다.

     

    문제를 풀면서 적어둔 주석

    """
    5430 AC
    R: 뒤집기  / D: 버리기(없으면 에러)
    
    -입력
    for T(입력):
        1. 실행할 함수 RRDD
        2. 배열 개수
        3. 배열 [sep = ,]
    
    배열 입력은 [1,N-1] sep=,
    앞뒤로 둘다 뺄 수 있도록 데크로 구현. deque
    D는 left와 right를 구분할 bool값으로 체크해서 pop
    """

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    코드

    from collections import deque
    import sys
    input = sys.stdin.readline
    
    """
    ㅇㅇ
    """
    
    T = int(input())
    for i in range(T):
        #입력
        p = deque(input().rstrip())
        n = int(input())
        arr = deque(input().strip()[1:-1].split(sep=","))       #'['와 ']'를 잘라내고 ','로 구분해서 숫자만 꺼내 데크로 만듬
        if(n==0):        #빈 객체라면 ['']라고 되있어서 ''제거
            arr.pop()
        direction = True        #True일때 left제거, False일때 right제거
        err = False
    
        #함수 실행
        for i in range(len(p)):
            AC = p.popleft()
            if AC=="R":
                direction = not direction
            else:   #D일때
                try:
                    if direction: 
                        arr.popleft()
                    else:
                        arr.pop()
                except:
                    err=True
                    break
        if not direction:
            arr.reverse()
    
        #출력
        if err:
            print("error")
        else:
            print("[",end="")
            print(*arr, sep=",", end="")
            print("]")

    300ms

     

    reverse를 한번 썼는데 자동import가 이상한걸 import하는 바람에;; 4번이나 틀렸다. 의문의 런타임에러 4번... 억울해

    '백준 > 문제풀이_python' 카테고리의 다른 글

    25908 수열의 합 _python  (0) 2022.11.02
    1011 Fly me to the Alpha Centauri _python  (0) 2022.11.02
    4889 안정적인 문자열 _python  (0) 2022.10.31
    11659 구간 합 구하기 4 _python  (0) 2022.10.31
    3053 택시 기하학 _python  (0) 2022.10.30

    댓글