반응형

deque 3

백준 5430번 AC

백준 5430번 AC 문제이다. 문제를 살펴보면 문제만 봤을때는 R 과 D에 따라서 처리해주면 쉽게 되지 않을까 생각했다. 실제 코딩을 해보니 생각해줄 것들이 꽤나 있었다. 먼저 D를 통해 pop이 되기 때문에 최종 결과가 요소가 없는 []인 상태가 될 수 있다. 이떼는 error가 아닌 []가 출력되도록 해야 한다. 출력은 [x,y,z,...]의 형태를 만족시켜야 했다. 중간에 띄어쓰기가 있으면 안된다. 로직은 맞지만 돌려보니 시간초과가 나오는 경우가 발생했다. R은 연속으로 나오면 뒤집은걸 다시 뒤집기 때문에 원래의 상태가 된다. 따라서 RR인 경우 없애버리는 로직을 만들었지만 이 또한 시간초과가 발생했다. 뒤늦게 생각해보니 뒤집을 필요가 없었다... Deque이기 때문에 앞뒤로 빼내는 것이 가능하고..

백준 18258번 큐2

백준 18258번 큐2 문제이다. 문제를 보면 명령어를 계속해서 받고 명령어에 따라 큐를 처리해주면 되는 문제이다. 코드를 짜는 것은 쉽다, 하지만 리스트로 구현을 하는 경우 O(n)의 복잡도를 갖기 때문에 시간 초과가 발생한다. O(1)의 복잡도를 갖는다는 Queue를 사용하여 구현을 하려 했으나 어디서 큰 복잡도를 갖는것인지 시간초과가 나왔다... 결국엔 deque를 사용하여 풀었다. deque가 속도나, 사용하기에 훨씬 편한것 같다. 코드는 다음과 같다. import sys from collections import deque n = int(sys.stdin.readline().strip()) deq = deque() for i in range(n): ins = sys.stdin.readline()..

백준 2164번 카드2

백준 2164번 카드2 문제이다. 문제를 보면 문제만 보면 리스트를 반복문을 통해 요소를 삭제하고 맨뒤로 돌리고 반복해주면 쉽게 풀릴 것으로 보였다. 코드를 작성하고 제출을 했지만... 시간초과가 나왔다. 크게 시간복잡도가 큰게 없다고 생각해서 찾아보니 리스트의 del, insert와 같은 함수들은 시간 복잡도가 O(n)이라고 한다. deque를 이용하면 시간복잡도를 O(1)로 줄일 수 있다고 한다. 코드를 보면 import sys from collections import deque deq = deque() n = int(sys.stdin.readline().strip()) for i in range(n): deq.append(i) while True: if len(deq) == 1: break deq..

반응형