자료구조15 [백준] 7662번 - 이중 우선순위 큐 (파이썬) # 이중 우선순위 큐 import heapq T = int(input()) for _ in range(T): N = int(input()) min_heap = [] max_heap = [] visited = [False] * N for idx in range(N): order, data = input().split() data = int(data) if order == 'I': heapq.heappush(min_heap, (data, idx)) heapq.heappush(max_heap, (-data, idx)) visited[idx] = True elif order == 'D': if data == 1: while max_heap and not visited[max_heap[0][1]]: heapq.h.. 2022. 5. 17. [프로그래머스] Lv2 - 올바른 괄호 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr def solution(s): stack = [] for target in s: if target == ')' and stack and stack[-1] == '(': stack.pop() else: stack.append(target) return True if not stack else False 자료구조, 스택 .. 2022. 5. 14. [프로그래머스] Lv2 - 괄호 회전하기 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr def solution(s): answer = 0 for k in range(len(s)): temp = s[k:]+s[:k] if check(temp): answer += 1 return answer def check(temp): arr = list(temp) if arr[0] in (')', '}', ']'): return False if arr[-1] in ('(', '{', '['): return False # 스택 이용 dict = {')': '(', '}': '{', ']': '['} stack = [] for x in arr:.. 2022. 4. 5. [프로그래머스] Lv2 - 짝지어 제거하기 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr def solution(s): answer = 0 if can_remove(s) else 1 return answer def can_remove(s): stack = [] for x in s: if not stack: stack.append(x) else: if stack[-1] == x: stack.pop() else: stack.append(x).. 2022. 3. 30. [백준] 17299번 - 오등큰수 (파이썬) # 오등큰수 from collections import Counter import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split())) count = Counter(arr) result = [-1] * N stack = [] for i in range(N): while stack and count[arr[stack[-1]]] < count[arr[i]]: result[stack.pop()] = arr[i] stack.append(i) print(*result) 자료구조(스택) 1. Count를 이용해서 개수 딕셔너리를 만든다. 2. 반복문 시작 - 현재 인덱스(stack [-1])의 값보다 i의 값이 더 .. 2022. 3. 14. [백준] 17298번 - 오큰수 (파이썬) # 오큰수 import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split())) result = [-1] * N stack = [] for i in range(N): while stack and arr[stack[-1]] < arr[i]: result[stack.pop()] = arr[i] stack.append(i) print(*result) 자료구조(스택) 1. stack = [0]인 상태로 시작 2. 반복문은 시작 - 현재 인덱스(stack [-1])의 값보다 i의 값이 더 작으면 전부 pop (pop한 인덱스의 답 : 현재 값) - 이후 스택에 i appepnd 3. result 출력 스택 내부를 항상.. 2022. 3. 14. [백준] 2812번 - 크게 만들기 (파이썬) # 크게 만들기 N, K = map(int, input().split()) arr = list(map(int, input().strip())) result = [] for x in arr: if not result: result.append(x) continue while result and result[-1] < x and K != 0: K -= 1 result.pop() result.append(x) while K != 0: K -= 1 result.pop() print(*result, sep='') 자료구조(스택), 그리디 1. result 리스트를 정의하고 입력받은 값들을 하나씩 순회 - result 리스트가 비어 있다면 append하고 continue - result[-1]보다 현재 값이 더 크.. 2022. 3. 9. 이전 1 2 3 다음