우노
[Implementation] 백준 5430번 “AC” Python 풀이 본문
문제 링크
풀이
- R 함수 시, 정말 배열의 모든 원소를 뒤집는다면, 시간 초과가 발생합니다.
- RR -> 그대로이므로 뒤집을 필요가 없습니다.
- 따라서, 모든 함수에 등장한 R의 개수가 홀수일 경우에만, 모든 함수들을 처리한 뒤, 마지막으로 reverse를 수행하면 됩니다.
- 함수 중간에 D가 등장하는 경우에는,
- 현재까지 등장한 R의 개수에 따라,
- 배열의 모든 원소를 ‘유지’ 또는 ‘reverse’ 한다고 가정한 뒤,
- deque의 popleft 또는 pop을 사용해 원소를 삭제하면 됩니다.
- 추가 예외처리
- 빈 배열(n이 0인 경우)이 입력으로 들어올 수 있습니다.
- 하지만, 배열이 비어있어도 R 함수는 실행할 수 있습니다.
코드
import sys
from collections import deque
# 테스트 케이스 개수
t = int(sys.stdin.readline())
for _ in range(t):
# 수행할 함수
total_command = sys.stdin.readline().rstrip()
# 배열에 들어있는 수의 개수
n = int(sys.stdin.readline())
# 문자열에서 '[', ']'를 제거하고,
# ',' 기준으로 분리한 뒤, queue에 담기
q = deque(sys.stdin.readline().rstrip()[1:-1].split(','))
# 배열이 비어있다면
if (n == 0):
# 배열이 비어있어도, R 함수는 문제 없이 실행할 수 있으므로, q를 빈 배열로 초기화
q = []
# R 함수의 개수
r_count = 0
# 에러 여부
error = False
# 순서대로 함수 실행
for command in total_command:
# R 함수라면
if (command == 'R'):
# R 함수의 개수 추가
r_count += 1
# D 함수라면
else:
# 배열에 수가 남아있을 경우
if (q):
# 현재까지 등장한 R의 개수가 홀수일 경우
if (r_count % 2 == 1):
# reverse 했다고 가정한 뒤, pop 실행
q.pop()
# 현재까지 등장한 R의 개수가 홀수일 경우
else:
# 변함 없는 상태라고 가정한 뒤, popleft 실행
q.popleft()
# 배열에 수가 남아있지 않을 경우
else:
error = True
break
# 에러가 발생했다면
if (error == True):
print('error')
# 에러가 발생하지 않았다면
else:
# 모든 함수에 등장한 R의 개수가 홀수라면, 전체 배열 뒤집기
if (r_count % 2 == 1):
q.reverse()
print('[' + ','.join(q) + ']')
# 모든 함수에 등장한 R의 개수가 짝수라면, 그대로 유지
else:
print('[' + ','.join(q) + ']')
'Algorithm > Implementation' 카테고리의 다른 글
[Implementation] 프로그래머스 “완주하지 못한 선수” Python 풀이 (0) | 2022.11.21 |
---|---|
[Implementation] 백준 1790번 “수 이어 쓰기 2” Python 풀이 (1) | 2022.11.07 |
[Implementation] 백준 2615번 “오목” Python 풀이 (0) | 2022.11.06 |
[Implementation] 프로그래머스 “올바른 괄호” Python 풀이 (0) | 2022.10.24 |
[Implementation] 백준 16719번 “ZOAC” Python 풀이 (0) | 2022.10.24 |
Comments