본문 바로가기
Algorithm/스택&큐&덱&힙

[백준] 5430번 AC

by HANNI하니 2023. 1. 22.

사용 언어 - Python3

5430번: 덱 (골드5, 큐)

문제 ★큐 문제

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

 

정답

큐 reverse 처리하기

(코드 풀이)

1. 입력 형태 주의하기

input 형태가 [1,2,3,4]이다. 우리는 deque의 입력값으로 '1','2','3','4'를 넣기 위해 데이터를 가공해줘야한다.

앞과 끝의 대괄호 []는 없애고, 컴마(,)로 split하여 인식하여 deque의 입력값을 넣어준다.

 

2. 시간복잡도 reverse 해결하기

R 함수는 전체 큐를 q.reverse() 해야하기 때문에 시간 초과된다.

reverse 해주는 경우를 따로 if문으로 처리해주는 방식으로 시간복잡도를 해결한다.

 

reverse를 두 번 해주면 뒤집고 또 뒤집은 거라 원래 상태와 같다.

R 함수가 나온 횟수를 R변수로 센다.

R % 2 == 0 2로 나누어 떨어지는 경우는 reverse를 무시한다.

 

D 함수가 나온 경우, 큐의 길이가 없다면 error를 출력하고 멈춘다. break

아직 R 함수가 적용안되었기 때문에 R % 2 == 0으로 reverse가 필요한 경우인지 아닌지를 확인해야한다.

reverse가 필요 없는 경우는 popleft() 가장 왼쪽 값을 삭제해주고, reverse 해야하는 경우는 pop()으로 가장 오른쪽 값을 삭제해줘야한다.

 

3. 예외 처리

n == 0인 경우 q = deque() 혹은 q = []로 리셋해줘야한다.

 

4. 프린트 형식

print("["+",".join(q)+"]")

 

# 정답2
import sys
from collections import deque

t = int(input()) # 테스트 케이스 개수
for i in range(t):
    p = input().strip() #함수
    n = int(input()) #배열 수의 개수
    arr = input()[1:-1].strip().split(',') # 배열에 들어가있는 숫자들
    q = deque(arr)

    if n == 0: # 예외처리
        q = deque()
        
    R = 0 # R함수가 나온 횟수
    for j in p:
        if j == 'R':
            R += 1
        elif j == 'D': # 가장 왼쪽 값 삭제 popleft()
            if len(q) == 0:
                print('error')
                break
            else:
                if R % 2 == 0: #reverse 필요 없는 경우
                    q.popleft() 
                else: # reverse해야하는 경우라 가장 오른쪽 값 삭제
                    q.pop()

    else: #for문이 break로 끊기지 않고 끝까지 수행된 경우 else명령어 시행
        if R % 2 == 0:
            print('[' + ",".join(q) + ']')
        else:
            q.reverse()
            print('[' + ",".join(q) + ']')

 


레퍼런스

  • 정답 참고
 

[백준 알고리즘] 5430번 AC, 파이썬(python)

5430, AC 📁 문제 출처 https://www.acmicpc.net/problem/5430 💡 생각 일단 문제 그대로 하나씩 풀어나갔지만 시간 초과가 발생했다. 시간 초과 코드 t = int(input()) for i in range(t): p = input() n = int(input()) arr = lis

lakelouise.tistory.com

 

백준 5430번 AC 파이썬

입력 배열의 파싱 , 0번째 인덱스와 마지막 인덱스를 제외하면1,2,3,4 = > 1,2,3,4 로 만들어지므로arr1:-1 로 하면 1,2,3,4 라는 문자열이 만들어진다.여기서 split(',') 하면 '1','2','3','4' 가 만들어진다.R을

velog.io

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

  • 파이썬 for-else문

for문이 break로 끊기지 않고 끝까지 수행되었을 경우 else의 명령어를 수행한다.

 

[Python] 파이썬 for-else 문

안녕하세요. 파이썬에 있는 편리한 문법인 for-else 문에 대한 포스팅 입니다. 보통 프로그래밍 언어에서 'else'라고 하면 if와 함께 오는 경우가 거의 대부분입니다. 하지만 파이썬에서는 for 문과도

harryp.tistory.com

 

 

댓글