반응형
문제
에러 코드
from collections import deque
t = int(input()) # 테스트 케이스 개수
for i in range(t):
p = input() # 수행할 함수
n = int(input()) # 배열의 개수
arr = input() # 배열
# '[', ']', ',' 특수 문자 제거 후 자료형 변환
num = deque(arr.split('[')[1].split(']')[0].split(','))
if num[0]=='':
print('error')
break
for i in p:
if i == 'R':
num.reverse()
elif i =='D':
if len(num) == 0:
print('error')
break
else:
num.popleft()
if num:
print(list(map(int, num)))
정답코드
from collections import deque
import sys
input = sys.stdin.readline
t = int(input()) # 테스트 케이스 개수
for i in range(t):
p = input().strip() # 수행할 함수
n = int(input()) # 배열의 개수
num = deque(input().strip()[1:-1].split(',')) # 배열
flag = 0
if n==0:
num = []
for i in p:
if i == 'R':
flag += 1
elif i =='D':
if len(num) == 0:
print('error')
break
else:
if flag % 2 ==0:
num.popleft()
else:
num.pop()
else:
if flag % 2 == 1:
num.reverse()
print('['+','.join(num)+']')
핵심 포인트
- 입력값을 [1,2,3,4] 형태로 받는다. 하지만 우리는 정수 데이터만 필요하므로 필요 없는 ‘[’, ‘]’, ‘,’ 특수 문자들을 제거해줘야 한다.
- 슬라이싱을 통해서 간편하게 "[", "]" 문자를 제거할 수 있다. 그리고 난 후, split(’,') 메서드를 통해 쉼표를 기준으로 분리하여 저장한다.
- 수행할 함수가 ‘R’인 경우에 배열을 뒤집어 줘야 한다. 하지만 reverse() 를 매번 수행한다면 시간 초과가 발생하게 됩니다. 그러므로 ‘R’ 인 경우의 개수를 카운트한 후 마지막에 짝수 번인지 홀수 번인지 확인하여 한 번만 뒤집어줘야 합니다.
- num = deque(input().strip()[1:-1].split(',')) 다음 코드에서 [] 빈 값을 받게 되면 deque에는 [""]와 같이 빈 값을 하나 가지게 됩니다. 그러므로 n이 0인 경우를 따로 빈 리스트 값으로 변경해주어야 합니다.
나의 오류 및 개선 포인트
num = deque(arr.split('[')[1].split(']')[0].split(','))
if num[0]=='':
print('error')
break
(1) 나는 처음에 특수 문자를 제거할 방법이 생각나지 않아 split() 메서드를 통해 절차적으로 제거했다.
하나씩 제거하면서 저는 ‘]’ 형태에서 split(’]’)을 하게 되면 [””, “”] 빈 값 두개를 반환하는 점을 확인하였습니다.
(2) 빈 리스트 값은 “D” 함수 발생시 에러를 발생하지만 “R” 함수 발생 시 에러를 발생하지 않는다. 예제 코드를 보고 실수로 빈 리스트는 무조건 error를 출력한다는 잘못된 생각으로 조건문을 작성하여 수정하였습니다.
반응형
'Algorithm > Boj' 카테고리의 다른 글
백준 1021 파이썬 풀이 - 바킹독 파이썬 문제 풀이 (1) | 2023.09.28 |
---|---|
[BOJ] 백준 파이썬 13237 - Binary Tree (0) | 2023.02.16 |
[백준] 24445번 : 너비우선 탐색 - 파이썬 풀이 (0) | 2023.01.20 |
[백준] 1388번 : 바닥 장식 - python 풀이 (0) | 2023.01.15 |
백준 2798 파이썬 - 블랙 (0) | 2022.05.05 |