백준 5430번 - AC
백준 5430번 바로가기 첫 번째 풀이 t = int(input()) # 테스트 케이스의 개수 for _ in range(t): # 입력 p = input() # 수행할 함수 1~100,000 n = int(input()) # 배열에 들어있는 수의 개수 1~100,000 arr = input()[1:-1].split(',') if n == 0: arr = [] # 처리 for f in p: if f == "R": arr = arr[::-1] elif f == "D": if arr == []: print('error') break else: arr.pop(0) print('['+','.join(arr)+']') 두 번째 풀이 from collections import deque t = int(input()) # 테스트 케이스의 개수 for _ in range(t): # 입력 p = input() # 수행할 함수 1~100,000 n = int(input()) # 배열에 들어있는 수의 개수 1~100,000 arr = deque(input()[1:-1].split(',')) if n == 0: arr = deque() # 처리 for f in p: if f == "R": arr.reverse() elif f == "D": if arr: arr.popleft() else: print('error') break print('['+','.join(arr)+']') 세 번째 풀이 from collections import deque t = int(input()) # 테스트 케이스의 개수 for _ in range(t): # 입력 p = input() # 수행할 함수 1~100,000 n = int(input()) # 배열에 들어있는 수의 개수 1~100,000 arr = deque(input()[1:-1].split(',')) if n == 0: arr = deque() count = 0 # 처리 for f in p: if f == "R": count += 1 elif f == "D": if arr: if count%2 == 0: arr.popleft() else: arr.pop() else: print('error') break else: if count%2 == 1: arr.reverse() print('['+','.join(arr)+']') CODE REVIEW 첫 번째 풀이에서는 시간초과 에러로 걸렸다. list로 구현하다보니 탐색에 시간이 오래 걸린 모양이다. 두 번째 풀이에서는 deque를 활용했는데, 여전히 시간초과 에러가 발생했다. reverse()가 여러번 실행되면서 그런듯… 세 번쨰 풀이에서는 reverse()가 여러 번 호출되는 것을 방지하기 위해 count=0을 도입해서 홀짝성에 따라 pop() popleft()을 선택하고, reverse()는 한 번만 실행해주었다. 처음에는 만만하게 봤던 문제였는데, 생각보다 고려할게 많았다. 이런 기법들은 기억해두었다가 시간 단축이 필요할 때 써먹어야겠다.