현제의 현재이야기

[백준/python] 5430 - AC 본문

algorithm

[백준/python] 5430 - AC

현재의 현제 2022. 9. 30. 14:31

 

5430번: AC

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

www.acmicpc.net

from collections import deque

n = int(input())
results = []
for _ in range(n):
    order = input()
    arr_num = int(input())
    num = input()[1:-1].split(",")
    num = deque(num)
    r = 0
    rst = 0
    for target in order:
        if target == 'R':
            if r == 0:
                r = 1
            else:
                r = 0
        elif target == 'D':
            if arr_num == 0:
                results.append('error')
                rst = 1
                break
            if len(num) == 0:
                results.append('error')
                rst = 1
                break

            if r == 0:
                num.popleft()
            else:
                num.pop()
    if r == 0 and rst != 1:
        results.append(num)
    elif r == 1 and rst != 1:
        num_result = []
        while num:
            num_pop = num.pop()
            num_result.append(num_pop)
        results.append(num_result)

for result in results:
    if result != 'error':
        print('[', end='')
        print(*result, sep=",", end=']\n')
    else:
        print(result)

| 알고리즘

  • 만약 입력으로 함수가 R이면 r을 0이나 1로 바꾸어준다. 여기서 r은 현재 배열의 상태로 0이면 뒤집히지 않은 상태이고 1이면 뒤집한 상태이다. 
  • 만약 함수가 D이면 r이 1이면 popleft, r이 2이면 pop을 해준다. 애초에 배열의 정수가 0개이거나 D함수로 인해서 배열의 정수 개수가 0개가 되면 'error' 을 results에 넣고 break한다. 이 예외들은 rst 를 1로 설정한다.
  • for 문이 다 끝나면 r과 rst 상태를 확인한 후, r이 0 ,즉 뒤집히지 않았으면 그대로 results에 append하고, r이 1, 즉 뒤집힌 상태라면 pop을 하고 새로운 배열 num_result에 append하고 results에 넣어준다.

| 알게된 점

  • 너무 입력과 출력이 더러웠다. 내가 어려운 부분은 다른 사람들도 다 어려워한다! input 함수에 슬라이싱이 되는지 처음알았다.
num = input()[1:-1].split(",")
  • *를 사용한 언패킹 방법과 sep, end를 활용해서 [1, 2, 3, 4]를 [1,2,3,4]로 바꾸어주는 방법을 알게되었다.
 print('[', end='')
 print(*result, sep=",", end=']\n')
  • 처음에 리스트를 문자열에서 정수로 바꿀 때, list(map(int, num))를 했더니 런타임 오류가 났었다. 한자리 수가 아니면 런타임 에러가 나나보다.

제한시간을 보고 뭔가 reverse나 for문을 한번 더 써서 R이 나올 때 전체를 뒤집으면 시간초가가 나겠구나해서 고민한 결과 배열의 상태를 바꾼다는 방법이 떠올라서 후다닥 풀다가 출력에서 애먹었던 문제. 

'algorithm' 카테고리의 다른 글

[백준/python] 11047 - 동전0  (0) 2022.10.04
[백준/python] 2468 - 안전 영역  (1) 2022.10.01
[백준/python] 2164 - 카드2  (0) 2022.09.29
[백준/python] 2606 - 바이러스  (0) 2022.09.28
[백준/python] 1331 - 나이트투어  (0) 2022.09.27
Comments