본문 바로가기

공부 정리/알고리즘4

우선순위 큐 우선순위 큐 개념정리 우선순위 큐의 기능 우선순위 큐는 주로 다음과 같은 연산을 지원한다 Insertion(삽입): 원소를 큐에 삽입할때는 해당 원소의 우선순위도 함께 지정된다 Deletion(삭제): 큐에서 원소를 삭제할때는 가장 높은(또는 낮은) 우선순위를 가진 원소가 제거된다 우선순위 큐는 언제 사용될수있을까 우선순위 큐는 다양한 상황에서 요소들 사이의 상대적인 '중요성' 또는 '우선순위'를 고려하여 처리해야 할 때 유용하게 사용된다. 병원의 응급실은 이에 대한 아주 좋은 예다. 응급실에서 환자들은 단순히 먼저 도착한 순서대로 진료를 받는 것이 아니라, 그들의 상태나 '중증도'에 따라 진료 우선순위가 결정된다. 이러한 방식은 특히 생명을 구하는 긴급한 상황에서 필수적이다. 단순한 감기 증상으로 응급.. 2023. 9. 15.
LIS길이를 이분탐색으로 구해보자(python) 가장 긴 증가하는 부분수열(LIS)의 길이를 이분탐색을 이용해 구해보자 먼저 가장 긴 증가하는 부분 수열이 뭔지 이해해보자 수열: 숫자들의 나열 ex) [5,3,8,2] 부분수열: 수열안에서 몇몇 숫자들을 골라서 만든 새로운 수열 ex) [5,8,3,2] => [5,8,2] 따라서 수열 [10, 20, 10, 30, 20, 50]이 있을때 따라서 가장 긴 증가하는 부분 수열은 [10, 20, 10, 30, 20, 50]이고 길이는 4이다 이분탐색을 이용한 풀이 주어진 수열의 각 원소를 순회하면서 이분탐색을 적용해나간다 따라서 시간복잡도는 O(nlogn) 이된다 세부적인 이진탐색 과정은 아래와 같다 현재 원소를 이진 탐색을 통해 LIS 배열에 삽입할 위치를 찾는다 (LIS배열은 항상 정렬된 상태를 유지한다.. 2023. 6. 6.
백준 랜선자르기(1654번) 파이썬 풀이 이진탐색 카테고리에 속한 문제 정답코드K, N=map(int,input().split())cable_list=[]for _ in range(K): cable_list.append(int(input()))def how_many_cable(cable_size, cable_list): cable_num=0 for cable in cable_list: cable_num+=(cable//cable_size) return cable_numdef binary_search(K, cable_list, target): low=1 high=max(cable_list) while low=target) & (cn2=target: low=middle+1.. 2023. 3. 17.
백준 수찾기(1920번) 파이썬 풀이 전체 코드# 수 찾기N=int(input())A=list(map(int,input().split()))M=int(input())B=list(map(int,input().split()))def is_there(min_idx, max_idx, array, num): middle_idx=(min_idx+max_idx)//2 if (array[middle_idx]==num or array[max_idx]==num) or array[min_idx]==num: print(1) return if max_idx-min_idx==1: print(0) return elif array[middle_idx]num: return.. 2023. 2. 22.