-
5430. [Python]ACPython_알고리즘/Gold V 2023. 8. 8. 12:38
1. 문제
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
2. 접근 방법
- 시간 제한: 1초
- 메모리 제한: 256MB
- 덱
- 파싱
3. 파이썬 코드
import sys from collections import deque # 많은 인풋 처리 input = sys.stdin.readline T = int(input()) for _ in range(T): # 명령어로 R or D 가 입력됨 command = input() # N 의 갯수만큼 리스트 인풋 N = int(input()) # deque 형태로 리스트 ,을 기준으로 잘라버림 num_list = deque(map(str,input().strip().split(","))) # 리스트에서 불필요한 "[","]" 을따로 처리해줌 num_list[0] = num_list[0].strip("[") num_list[-1] = num_list[-1].strip("]") # flag 를 통해서 반복문 종료 시점 알려줌 flag = 0 # Reverse 가 되야하는지 아닌지 판단할 변수 reverse_flag = 0 # command 에 들어있는 변수를 탐색하며 for i in command: # 만약 R인경우 reverse_flag 값이 0 이면 1로 1이면 0으로 변경 if i == "R": if reverse_flag == 0: reverse_flag = 1 elif reverse_flag == 1: reverse_flag = 0 # D인 경우 elif i == "D": # num_list 가 존재하고 num_list 첫번째 값이 "" 이 아닌 경우 if num_list and num_list[0] != "": # reverse_flag 값이 0 이면 왼쪽 값 추출 if reverse_flag == 0: num_list.popleft() # reverse_flag 값이 1 이면 오른쪽 값 추출 elif reverse_flag == 1: num_list.pop() # 만약 위의 조건식 외의 경우 else: # flag 를 통해서 error 가 생긴 것을 알려주고 break flag = 1 print("error") break # flag 값이 1이 닌 경우 if flag == 0: # deque로 구성된 값을 리스트로 치환 num_list = list(num_list) # 만약 reverse 가 존재하면 if reverse_flag == 1: # list 값을 역순 정렬 num_list = num_list[::-1] # join을 사용하여 출력형태 변경 answer = ",".join(num_list) print(f"[{answer}]") # reverse 가 없으면 elif reverse_flag == 0: # join을 통해서 출력 형태 변경 answer = ",".join(num_list) print(f"[{answer}]")
4. 문제를 풀고난 후 생각
- 입력의 형태가 기존에 " " 공백을 두고 주어지는 것이 아닌 str 형태의 리스트 입력으로 주어진다.
- 먼저 들어온 데이터를 파싱하여 기존의 우리가 다루는 list 형태로 변형해준 후 입력된 command 값을 통해서 어떻게 진행할지 생각을 해야한다.
- pop(0) 보다는 덱을 통해 popleft()를 사용해서 시간 복잡도를 최소화 해야한다.
- 조건에 맞게 R인 경우 reverse_flag 를 통해서 뒤집을지 말지를 결정하고 D의 경우 deque에 값이 있는지 없는지를 판단하여 error를 출력해야 하는지 값을 뽑아야 하는지 또한 결정 해야했다.
- 모든 반복문이 끝난 후 출력단에서 파싱을 한번 더 진행해 줘야한다.
- list 값을 join 을 통해서 ","를 붙여서 합쳐준 후 f-string 을 통해서 "[", "]" 값을 붙여서 맞게 출력해 줘야한다.
- 알고리즘 적인 구현 보다는 문자열 파싱을 얼마나 잘 할 수 있는지를 물어보는 문제였던 것 같다.
5. 문제를 푸는데 도움이 되는 지식
- 문자열 파싱
- 덱
'Python_알고리즘 > Gold V' 카테고리의 다른 글
7576. [Python]토마토 (0) 2023.09.17 1334. [Python]다음 팰린드롬 (0) 2023.09.17 1038. [Python]감소하는 수 (0) 2023.09.08 1083. [Python]소트 (0) 2023.09.07 2493. [Python]탑 (0) 2023.02.06