본문 바로가기
알고리즘

[백준] 5430번: AC - python

by 육빔 2024. 3. 20.
728x90
반응형

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

 

5430번: AC

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

www.acmicpc.net

 

deque를 사용하여 뒤집기를 잘 구현한는게 핵심인듯한 문제

 

뭐 접근방법은 딱히 없고 구현을 빡세게 했다.

열심히 짯는데... 도대체 왜 시간초과인것인가..

from collections import deque

n = int(input())

for _ in range(n):
    com = input()
    k = int(input())
    arr = input()

    arr = arr[1:-1]
  
    if arr:
        arr = list(map(int, arr.split(",")))

    dq = deque(arr)

    for j in range(len(com)):
        if com[j] == 'R':
            tmp = deque()
            while dq:
                tmp.append(dq.pop())
            dq = tmp
        elif com[j] == 'D':
            if dq:
                dq.popleft()
            else:
                print("error")
                break
    if dq:
        print('[', end="")
        for k in dq:
            if k != dq[-1]:
                print(k, end=",")
            else:
                print(k, end="")
        print(']')

 

피눈물을 머금고 다시한번 생각하고 있다..

 

도저히 안되겠어서 찾아본결과 난 소름이 돋았다..ㅋㅋ Reverse는 사실 맨 마지막에 해줘도 된다는 사실을..

단지 pop을 왼쪽에서하고, 오른쪽에서 하고 그 후 맨 마지막에 R이 짝수개이면 그대로 출력 아니면 그때 한번만 뒤집으면 해결되는 문제였다..

 

from collections import deque

n = int(input())

for _ in range(n):
    com = input()
    k = int(input())
    arr = input()

    arr = arr[1:-1]
    
    if arr:
        arr = list(arr.split(","))
    dq = deque(arr)
    
    if k == 0:
        dq = deque()
    

    flag = 1
    R = 0

    for j in range(len(com)):
        
        if com[j] == 'R':
            R +=1
        elif com[j] == 'D':
            if dq:
                if R % 2 == 0:
                    dq.popleft()
                else:
                    dq.pop()
            else:
                print("error")
                flag = 0
                break

    if flag == 0:
        continue
    else:
        if R % 2 == 0:
            print('[' + ",".join(dq) + ']')
        else:
            dq.reverse()
            print('[' + ",".join(dq) + ']')

찾아보다가 join도 편한거같다^.^ d

 

다른사람 코드 참조해서 겨우 풀었다..

 

** 뒤집는건 꼭 처음에 해야하는지 생각해보자**

728x90
반응형