Algorithm & Problem Solving/구현(Implementation)

[백준 1360] 되돌리기 (Python)

baby_ohgu 2021. 1. 21. 01:55

www.acmicpc.net/problem/1360

 

1360번: 되돌리기

첫째 줄에 명령의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 명령과 수행한 시간이 주어진다. 항상 시간이 오름차순으로 주어지고, type c에서 c는 알파벳 소문자, undo t에서 t는 1보다 크거나 같

www.acmicpc.net

 

문제풀이

N : 입력값

cmd, ch, t : 입력값

q : 현재까지의 시간과 타이핑한 텍스트 저장 리스트 [(시간, 텍스트)]

now : 현재 텍스트

 

따로 알고리즘이 필요없는, 그냥 문제에서 요구한대로 구현만 하면 해결할 수 있는 문제이다. 몇몇 예외 테스트케이스만 조심하면 쉽게 해결할 수 있다.

 

1. cmd가 type일 경우

- 현재 텍스트(now)에 ch 추가

- q에 시간(t)과 텍스트(now) 저장

 

2. cmd가 undo일 경우

- q에서 시간이 t - ch 보다 작을때까지 탐색

- 그때의 텍스트를 가져와서 q에 현재시간과 텍스트 삽입

- q에 존재하는 최초의 시간보다 작을 경우 비어있는 텍스트 삽입

 

3. q의 마지막 시간에 있는 텍스트를 출력한다.

 

코드

import sys

if __name__ == '__main__':
    N = int(input())
    q = []
    now = ''
    for _ in range(N):
        flag = False
        cmd, ch, t = map(str, sys.stdin.readline().split())
        if cmd == 'type':
            now += ch
            q.append((int(t), now))
        else:
            ch, t = int(ch), int(t)
            for i in range(len(q) - 1, -1, -1):
                if q[i][0] >= t - ch: continue
                flag = True
                now = q[i][1]
                q.append((t, now))
                break
            if not flag:
                now = ''
                q.append((t, now))
    print(q[-1][1])

 

결과

 

문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!