Skip to content

[백준 2002번] 추월 문제 코드 리펙토링 요청 #11

Description

@KangKyuC

문제 상황

문제에 대해 아래와 같이 해결해봤습니다.
다만, 코드가 영 최적화되지 않았으나, 마땅히 더 시간복잡도를 줄일 수 있는 방향으로 생각나지 않아
어떻게 시도해보면 더 시간복잡도가 줄 수 있을지 같이 고민해주시길 바라며 작성해보게 되었습니다.

자유롭게 의견 부탁드려요!

from collections import deque

queue = deque()
N = int(input())

for _ in range(N):
    queue.append(input())

out_cars = set()

out_list = [input() for _ in range(N)]

for out_car in out_list:
    if queue[0] == out_car:
        # 큐의 맨 위가 나온 놈과 같음.
        # 아직 안 나온 놈이면 pop 하면 됨.
        # 나온 놈이면 안 나온 놈 나올 때 까지, pop 해줘야 함.
        queue.popleft()
        if not len(queue):
            break
        while (queue[0] in out_cars):
            # 나온 차이니, 큐의 탑과 다를 때 까지 빼버림.
            queue.popleft()
            if not len(queue):
                break
    else:
        # 큐의 맨 위와 현재 값이 다름.
        # 다르다는 것은 순서가 바뀌었음을 의미함.
        # Why? -> 항상 큐는 순서를 유지하고 있으니까.
        # 그러면 나온놈이라고 집합에 넣어서 알려줌.
        out_cars.add(out_car)

print(len(out_cars))


Metadata

Metadata

Labels

enhancement성능 향상 목적의 상호 해결 요청용 태그review request코드 리뷰 요청 태그

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions