코테 준비/Stack, Queue
-
[프로그래머스] 스킬트리코테 준비/Stack, Queue 2024. 1. 30. 14:34
문제 이해하는데 시간이 좀 걸렸다.. def solution(skill, skill_trees): cnt=0 for i in range(len(skill_trees)): tree="" for j in skill_trees[i]: if j in skill: tree+=j #skill에 있는 문자만 뽑기 flag=True if tree=="": # 아예 skill에 없는 문자만 있으면 count flag=True else: if tree[0]!=skill[0]: #가장 첫 알파벳이 선행되어야함 flag=False if tree not in skill: # 순서대로 스킬을 쌓아야함 flag=False if flag==True: cnt+=1 return cnt
-
[프로그래머스] 롤케이크 자르기코테 준비/Stack, Queue 2024. 1. 30. 10:50
처음에는 for 문으로 topping을 돌면서 set의 길이를 비교해서 같을 때 count 하면 된다고 생각했지만 시간 초과함 def solution(topping): answer = 0 for i in range(len(topping)): if len(set(topping[:i]))==len(set(topping[i:])): answer+=1 return answer 시간초과를 줄이려면 딕셔너리 두개를 활용해서 Counter(a) 한 뒤, a에 있는 숫자를 하나씩 빼서 b로 옮기면서 비교해야함. def solution(topping): answer = 0 a={} b={} for i in topping: # a에 각 숫자 몇개 있는지 다 담기 if i in a: a[i]+=1 else: a[i]=1 f..
-
[백준] 7662. 이중우선순위큐코테 준비/Stack, Queue 2023. 1. 13. 02:26
시간초과때문에 heapq를 사용해야 시간을 단축시킬 수 있다. list로 하면 시간복잡도가 O(n)인데 heapq로 하면 O(log2n)이라서 heapq로 최소힙, 최대힙 따로 만들어서 해야함 import heapq import sys t=int(sys.stdin.readline()) for i in range(t): n=int(sys.stdin.readline()) minqueue=[] #최소 힙 maxqueue=[] #최대 힙 visited=[0]*n for j in range(n): pqueue=sys.stdin.readline().rstrip() if pqueue.split()[0]=='I': x=int(pqueue.split()[1]) heapq.heappush(minqueue,(x,j)) he..
-
[프로그래머스] 이중우선순위큐코테 준비/Stack, Queue 2023. 1. 12. 20:53
def solution(operations): queue=[] for i in operations: if i.split()[0]=='I': queue.append(int(i.split()[1])) elif i=='D 1': if queue: queue.sort() queue.pop() elif i=='D -1': if queue: queue.sort(key=lambda x:-x) queue.pop() if queue: queue.sort(key=lambda x:-x) return [queue[0],queue[-1]] else: return [0,0]
-
Deque 모듈 사용하기 (10866. 덱)코테 준비/Stack, Queue 2022. 12. 8. 20:32
from collections import deque deque.append(item): item을 데크의 오른쪽 끝에 삽입 deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입 deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제 deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제 deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가 deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가 deque.remove(item): item을 데크에서 찾아 삭제 deque.rotate(num): 데크를 num만큼 회전(양수면 오른쪽, 음..