728x90
반응형
[Gold V] AC - 5430
[문제 링크](https://www.acmicpc.net/problem/5430)

🗝️알고리즘 분류
- 문자열
- 자료구조
- 덱
💻문제 정의
정수 배열이 주어졌을 때, R(뒤집기)와 D(버리기) 연산을 수행하는 프로그램을 작성하시오.
💡접근 및 설계
주어진 함수를 나누어 하나 씩 수행하도록 한다. R 함수와 D 함수를 각각 구현한 뒤, 입력받은 정수 배열에 적용한다.
R(뒤집기) 함수에 대해서, R의 횟수가 짝수일 경우 처음의 모양과 같게 될 것이다. 그렇기에 R이 나올때 마다 뒤집는 것이 아닌, R이 나온 횟수가 홀수인 경우에 대해서만 R 함수를 실행하도록 하였다.
✏️알고리즘 풀이
is_Null = False
rev = 0
for cmd in func:
if (cmd == "R"):
rev += 1
elif (cmd == "D"):
if Q:
if (rev % 2 != 0):
Q.pop()
else:
Q.popleft()
else:
print("error")
is_Null = True
break
D 함수는 첫 번째 수를 버리는 함수이다. 즉, R이 나온 후 D를 수행한다고 했을 때, R이 나온 횟수가 짝수면 처음 모습 그대로 일 것이고 처음의 수열에서 popleft()를 수행하게 될 것이다. R이 나온 횟수가 홀수이면 뒤집어진 상태에서 수열의 첫번째 수가 버려질 것이니 처음의 수열에서 pop()을 수행한 것과 결과가 같을 것이다.
if (rev % 2 != 0):
Q.reverse()
print("[" + ",".join(Q) + "]")
else:
print("[" + ",".join(Q) + "]")
이후 R이 나온 횟수에 따라 출력을 한다.
🗒️제출 코드
# 5430 AC
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for _ in range(T):
func = input().rstrip()
num = int(input())
arr = input().rstrip()
Q = deque(arr[1:-1].split(","))
if (num == 0):
Q = deque()
is_Null = False
rev = 0
for cmd in func:
if (cmd == "R"):
rev += 1
elif (cmd == "D"):
if Q:
if (rev % 2 != 0):
Q.pop()
else:
Q.popleft()
else:
print("error")
is_Null = True
break
if not is_Null:
if (rev % 2 != 0):
Q.reverse()
print("[" + ",".join(Q) + "]")
else:
print("[" + ",".join(Q) + "]")
💭오늘의 회고
입력 처리가 까다로웠던 문제였다.
덱에 수를 저장하고 R, D 명령을 구현하는 것은 문제 없었으나, 입력, 출력 조건을 처리하는게 더 힘들었던 것 같다...
기본기를 다시 한 번 다져야 할 시간인갑다.
728x90
반응형
'Coding-Test > 백준' 카테고리의 다른 글
| [Python] 7662 - 이중 우선순위 큐 (0) | 2025.06.27 |
|---|---|
| [Python] 10026 - 적록색약 (2) | 2025.05.28 |
| [Python] 11286 - 절댓값 힙 (0) | 2025.05.24 |
| [Python] 7576 - 토마토 (0) | 2025.05.24 |
| [Python] 12015 - 가장 긴 증가하는 수열 2 (0) | 2025.05.16 |