5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
✏️ 풀이
첫 번째 풀이
- 처음 문제를 풀었을 때, 마지막에 D, 0, [] 입력이 주어진 경우를 제대로 하지 않아서 Value error가 발생했다.
두 번째 풀이
- RR이 나온경우에는 배열이 그대로라서 문자열 메서드의 replace를 통해서 RR을 지우고, 반복문을 통해서 진행을 했다. 그런데 생각해보니 replace의 시간 복잡도를 몰랐는데, n보다 더 많이 걸려서 그냥 반복문으로 처리했다.
- 결국 문제에서 주어진 R, D연산을 반복문을 통해서 진행했다. 뭔가 문제에서 이걸 원하는게 아닐거 같은데?라는 생각과 함께 바로 시간 초과가 났다.
마지막 풀이
- 다른 여러가지 방법을 써봤는데, 전부 시간 초과라는 에러가 나서 힌트를 좀 얻고 시작했다.
- 생각해보니 deque을 쓰고 있으니 R을 쓰면 그냥 pop()을 통해서 빼고, R의 갯수를 세서 return할때 R을 할지 말지 정해서 반환을 하면 되는 것이였다. 확실히 빨랐다!
💻 코드
import sys; input = sys.stdin.readline
from collections import deque
def process(cmd, data):
cmd, data, flag = list(cmd), deque(data), 0
for w in cmd:
if w == "R":
flag += 1
elif w == "D":
if not data: return "error"
if flag % 2: data.pop()
elif not flag % 2: data.popleft()
return list(data)[::-1] if flag%2 else list(data)
for _ in range(int(input())):
command, n = input().strip(), int(input().strip())
data = input().rstrip()[1:-1].split(",")
if n == 0: data = []
result = process(command, data)
print('[' + ','.join(result) + ']') if result != "error" else print(result)
'PS > 백준' 카테고리의 다른 글
[백준] 5525 - IOIOI (0) | 2024.04.14 |
---|---|
[백준] 2589 - 보물섬 (0) | 2024.04.13 |
[백준] 25418 - 정수 a를 k로 만들기 (1) | 2024.01.11 |
[백준] 2583 - 영역 구하기 (0) | 2024.01.11 |
실버2 색종이 만들기(2630) (1) | 2024.01.01 |