본문 바로가기
IT/알고리즘

백준 - 5430번

by Sungjun_ 2020. 11. 13.

문제

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

 

5430번: AC

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

www.acmicpc.net

 


코드

import sys

def result(p, lst):
    l, r = 0, len(lst)
    reverse = False
    if r < p.count('D'):
        return 'error'
    for i in p:
        if i == 'R':
            reverse = not reverse
        elif i == 'D':
            if reverse: r -= 1
            else: l += 1

    if len(lst) == 0:
        return '[]'
    else:
        lst = lst[l:r]
        if reverse:
            return '[' + ','.join(reversed(lst)) + ']'
        else:
            return '[' + ','.join(lst) + ']'

T = int(input())
for _ in range(T):
    p = sys.stdin.readline().rstrip()
    n = int(input())
    lst = sys.stdin.readline().strip('[]\n').split(',')
    if n == 0:
        lst = []
    x = result(p, lst)
    print(x)

 

result 함수에서 l, r은 각각 리스트의 처음과 끝입니다.

reverse는 False 상태로 만약 명령어 R이 나오면 반대로 해주는데

이 때 R이 짝수번 나오면 원래 상태와 똑같기 때문에 False이고

R이 홀수번 나오면 뒤집어지기 때문에 True가 됩니다.

 

리스트의 전체 길이보다 D 명령어가 많으면 오류이기 때문에 error를 반환합니다.

 

그리고 명령어가 D일 때

뒤집어진 상태이면 오른쪽 하나를 빼주고, 뒤집어진 상태가 아니면 왼쪽 하나를 더해줍니다.

 

마지막 조건문에서 리스트가 비어있다면 빈 배열을 반환해주고

그렇지 않다면 lst를 lst[l:r]로 바꿔주고, 뒤집어진 상태인지를 확인한 뒤에 값을 반환합니다.

 

 

 

'IT > 알고리즘' 카테고리의 다른 글

알고리즘 - 재귀 알고리즘(2)  (0) 2020.11.18
알고리즘 - 재귀 알고리즘(1)  (0) 2020.11.16
알고리즘 - 큐(queue)  (0) 2020.11.12
백준 - 4949번  (0) 2020.11.09
백준 - 1406번  (0) 2020.11.09

댓글