-
큐, 덱 - 백준 5430Code Etc/코딩테스트 2023. 4. 16. 18:43반응형
큐와 덱은 하나의 자료구조인데
큐는 First In First Out의 구조를 가진 형태이다.
먼저 들어온 게 먼저 나가는 구조이다.
덱은 이와 비슷하지만 나가는 출구가 2개인 녀석이다
보통 앞에서 뽑아내는 경우 메모리를 정렬하는 과정에서 많이 소모되는데
덱은 빠져나간 메모리 삭제까지 알아서 해주니 꽤 빠르고 좋다.
문제를 하나 풀어보자
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
입력으로 testCase와 수행할 명령어, 배열의 길이, 배열이 주어지고
이에 따라 알맞은 동작을 수행하면 알고리즘을 작성하면 된다.
풀 때 입력받은 배열이 0인 경우를 해결하기가 까다로웠지만
if조건문을 추가해서 해결했다
그리고 error을 출력하고 또 []이 출력되는 경우가 있었는데
이는 error을 출력한 뒤 해당 for문을 종료해야하는데 그렇지 않아서
아래에서 출력이 한 번 더 된 경우였다. 그래서 breakPoint변수를 추가해줬다.
import sys input = sys.stdin.readline from collections import deque cases = int(input().rstrip()) for _ in range(cases) : func = input().rstrip() #함수를 입력받는다. length = int(input().rstrip()) #배열의 길이 arr = input().rstrip().split(',') #배열 arr[0] = arr[0].strip('[') arr[length-1] = arr[length-1].strip(']') deq = deque(arr) #위에서 만든 배열을 원소로하는 덱 생성 if deq == deque(['']) : #입력받은 배열의 원소가 없을 때 if 'D' not in func : #D가 아니라면 회전만 하므로 빈 배열 출력 print('[]') else : #D가 있다면 출력해야하는데 출력할 원소가 없으므로 error출력 print('error') continue isError = False #breakPoint로 사용할 변수 설정 isRev = False #앞에서 추출할지 뒤에서 추출할지 결정할 변수 설정 for i in range(len(func)) : #앞에서 입력받은 func수행 if func[i] == 'R' : isRev = not(isRev) #R이라면 isRev변수의 값을 반전시켜준다 else : try : #try except를 사용한 이유는 다 출력하여 뽑을 원소가 없는 경우를 대비 if isRev : #isRev가 True이면 뒤에서 추출 deq.pop() else : #아니면 앞에서 추출 deq.popleft() except : #Error발생 시 breakPoint변수 True대입하고 error출력 후 break print('error') isError =True break if isError : #breakPoint동작, except에서 error을 출력했으니 바로 continue로 넘어감 continue else : #정상 동작의 경우 if isRev : #Rev가 True이면 배열 전체를 뒤집어준다 deq.reverse() print('['+','.join(map(str,deq)) + ']') #정답출력
반응형'Code Etc > 코딩테스트' 카테고리의 다른 글
그리디 알고리즘 - 백준 1931 python (0) 2023.05.09 누적합 - 백준 11659, 2559 (0) 2023.04.28 스택 - 백준 1874 (0) 2023.04.11 동적계획법(Dynamic Programing) - 백준 1149,1932,2579,2156,11053,11054,2565,12865,9251 (0) 2023.04.02 🎉🎉 백준 골드5 달성!-! (0) 2023.03.29