#문제링크
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
#나의풀이
import sys
from collections import deque
if __name__=="__main__":
N = int(sys.stdin.readline())
for _ in range(N):
commands = sys.stdin.readline().strip()
len_arr = int(sys.stdin.readline())
s = sys.stdin.readline().rstrip()
if s == "[]":
arr = []
else:
arr = deque(list(s[1:-1].split(",")))
flag = True
reverse_count = 0
for command in commands:
if command == 'R':
reverse_count += 1
elif command == 'D':
if len(arr) == 0:
flag = False
break
else:
if reverse_count % 2 == 0:
arr.popleft()
else:
arr.pop()
if (flag):
if reverse_count % 2 == 1:
arr.reverse()
print("[" + ",".join(arr) + "]")
else:
print("error")
#해설
문자열 문제인데 입출력이 좀 까다롭게 나와서 귀찮았던 문제
if s == "[]":
arr = []
else:
arr = deque(list(s[1:-1].split(",")))
문자열 s로 받은게 []로만 되어 있으면 배열로 만들고 아닐경우 앞에서 값을 빼는 경우가 생기므로 deque로 만들고 맨 앞과 맨 뒤는 [와 ]이므로 1번째 인덱스부터 -1까지 해주었다 이후 split으로 ,으로 구분되어 있는것을 나눠주었다.
flag = True
reverse_count = 0
for command in commands:
if command == 'R':
reverse_count += 1
elif command == 'D':
if len(arr) == 0:
flag = False
break
else:
if reverse_count % 2 == 0:
arr.popleft()
else:
arr.pop()
error 발생시 flag 상태로 출력을 구분할것이라 선언해주었고 R을 만났을때 문자열을 반대로 뒤집어야 하는데 뒤집어야 하는 작업은 시간을 많이 소비한다 따라서 count를 세고 2로 나누었을때 나머지가 0이면 똑같은 상태이고 1일경우 뒤집어진 상태이므로 0일경우에는 D가 나오면 규칙대로 앞에서 빼주고 1일경우 뒤집힌 경우라 생각하여 뒤에서 pop으로 빼주었다.
if (flag):
if reverse_count % 2 == 1:
arr.reverse()
print("[" + ",".join(arr) + "]")
else:
print("error")
이후 flag 여부로 error인지 확인하고 아닐경우 뒤집어져있는지 체크해서 뒤집어주고 아닐경우 출력해준다.
'코딩테스트' 카테고리의 다른 글
[백준/파이썬] 22866 탑 보기 (0) | 2023.01.19 |
---|---|
[백준/파이썬] 16120 PPAP (0) | 2023.01.17 |
[백준/파이썬] 27211 도넛 행성 쇼미더코드 3회차 (0) | 2023.01.15 |
[백준/파이썬] 1446 지름길 (0) | 2023.01.12 |
[백준/파이썬] 1068 트리 (0) | 2023.01.10 |