반응형
1. 문제 소개
- 구현 문제에 해당된다
- undo 명령구간에 모든 명령어는 취소하고, 남은 type 명령의 문자를 저장해서 출력하는 문제다.
- undo 명령도 undo 에 의해 취소 될 수 있다.
2.코드
#입력 테스트 케이스 처리
def setTestCase():
N=input()
COMMAND_LIST = []
for i in range(int(N)):
COMMAND_LIST.append(input())
return COMMAND_LIST
#커맨드 라인 파싱
def command_parser(input_command_list):
command_list = []
for i in input_command_list:
split_command = i.split(" ")
command_type,command_content,seconds = split_command[0],split_command[1],int(split_command[2])
command_list.append((seconds,command_content))
return command_list
# 입력 처리
def process_command(command_list):
text = '' # 결과 문자열을 담을 변수
rollback_point=-1 # undo 의 분기를 찾을 카운트
# 명령어는 역순으로 처리
for command_set in reversed(list(command_list)):
seconds,command = command_set
# undo 가 적용되는 마지막 명령어 분기
if seconds == rollback_point:
rollback_point = -1
continue
# undo 가 해당되는 구간의 명령어 skip 분기
elif rollback_point != -1 and seconds > rollback_point:
continue
# undo 명령어를 만났을 때 분기
elif command.isdigit():
rollback_point = seconds - int(command)
if rollback_point < 0:
rollback_point = 0
continue
# 문자 저장
text+=command
return text[::-1] # 역순으로 결과 문자열이 저장되었기 때문에 reverse 처리
def solution():
input_command_list = setTestCase()
command_list=command_parser(input_command_list)
result = process_command(command_list)
print(result)
if __name__=='__main__':
solution()
3.코멘트
- 스택구조의 프로그램 호출 처리 흐름을 모방하여, 명령어를 역순으로 undo 범위에 해당되는 명령은 취소하여 문제를 해결했다.
- 생각한 테스트 케이스는 문제가 없었는데 실제 제출시 실패가 있었다.
- 함께 스터디한 스터디원에게 반례 케이스 정보를 얻어 문제를 해결할 수 있었다.
- type/undo 가 0초일때 , 그리고 같은 초에 여러 명령어의 입력이 들어올 경우를 추가하여 테스트 했다.
- 언제나 그랬지만 함께 열심히 공부한 스터디원에게서 지식을 얻는다. .. (스터디원들에게 고맙다 )
반응형
'Algorithm' 카테고리의 다른 글
leetcode 알고리즘 - TwoSum (0) | 2021.10.24 |
---|---|
Baekjoon 백준 알고리즘 - 스위치 켜고 끄기 ( 1244 ) (0) | 2021.10.17 |
Baekjoon 백준 알고리즘 - 경로찾기 ( 11403 ) (0) | 2021.06.07 |
Baekjoon 백준 알고리즘 - 침투 ( 13565 ) (0) | 2021.06.06 |
Baekjoon 백준 알고리즘 - 서버실 ( 17245 ) (0) | 2021.05.31 |