코딩테스트
[백준] 5430 | AC [파이썬/python]
사용할수없는닉네임이왜이렇게많지ㅠㅠ
2025. 4. 30. 23:55
728x90
문제
link: https://www.acmicpc.net/problem/5430
배열의 초기값과 수행할 함수를 입력받아 결과를 구하는 문제이다.
함수 R은 배열을 뒤집는 함수이다.
함수 D는 배열의 첫 번째 값을 삭제하는 함수이다.
배열이 비어 있을 때 함수 D를 실행할 경우 에러가 발생한다. 에러가 발생하는 경우에는 error를 출력한다.
접근
문제를 풀고 난 후 다시 보니 deque를 사용하는 것이 훨씬 효율적이었을 것 같다. 삭제 연산의 개수가 많아봤자 배열 크기를 넘지 않는다.
리스트와 인덱스를 이용해 문제를 풀었다. 최종적으로 배열 순서를 뒤집어야 하는지, 처음과 끝에서 값을 몇 개씩 잘라내야 하는지를 계산한 후 슬라이싱을 통해 결과를 출력했다.
배열이 '[1,2,3]' 이런 형식의 문자열로 주어진다. 자바스크립트에서는 문자열을 바로 객체로 변환할 수 있었던 것이 생각나 찾아보았는데 파이썬에도 비슷한 것이 있었다. 모듈 ast를 이용하면 문자열을 바로 리스트로 변환할 수 있다. ast.literal_eval()을 활용하면 된다.
처음에는 모듈 없이 코드를 짰었는데, 앞뒤 '[', ']' 문자를 제거한 후 .split(',')으로 구분해 숫자만 입력받으려고 하니 빈 문자열이 들어왔을 때('[]') 에러가 발생했다. 예외처리를 해도 되지만 모듈을 적용해서 쉽게 해결했다.
코드
import sys
import ast
input = sys.stdin.readline
for _ in range(int(input())):
p = input().strip()
n = int(input())
#literal_eval() 대신 사용하려던 초기 코드
#arr = list(map(int, input()[1:-1].strip().split(',')))
arr = ast.literal_eval(input().strip())
r = 0
s = 0
e = 0
for i in p:
if i == 'R':
r = not r
elif i == 'D' and s + e == n:
print('error')
break
elif i == 'D':
if r: e += 1
else: s += 1
else:
arr = arr[s:n-e]
if r: arr = arr[::-1]
print(f"[{','.join(map(str, arr))}]")
728x90