본문 바로가기

알고리즘26

[python 백준 7662] 이중 우선순위 큐 📜 접근 방법 1. 최소힙, 최대힙 2개 사용 -> 실패 2. 추가로 숫자를 체크하는 배열 사용 -> 성공 n 만큼 배열을 추가 : 숫자가 힙에 들어왔는지 체크하는 배열이며, 기본값은 False 처음에는 최소힙과 최대힙에 숫자만 넣어줬다면 튜플로 인덱스를 함께 넣어줌 -> heapq.heappush(min_heap, (num, num_index)) 인덱스는 값이 들어오는 순서(0 ~ n-1) - 숫자를 추가할 경우 False -> True로 변경 (True이면 값이 힙 안에 존재한다는 것) - 숫자를 제거할 경우 힙 안에 들어있는 최소(최대)값을 찾아서 제거해줘야하는데 그 부분을 배열에서 체크해야함! 현재 힙에 들어있는 최대, 최소값을 찾기 위해 pop을 시킨 후 그 값의 index와 배열의 인덱스를 확.. 2023. 1. 29.
[python 백준 1439] 뒤집기 📜 접근 방법 주어진 숫자를 보고 두가지로 나눴다. 1. 모든 숫자를 0으로 뒤집을 경우 (ex)000000) 2. 모든 숫자를 1로 뒤집을 경우 (ex)111111) 위의 경우를 보고 첫번째의 경우: 1이면 count + 1 두번째의 경우 : 0이면 count + 1 단, 이전 숫자가 현재 숫자와 같으면 count하지 않는다. (연속되는 수가 같을 경우) ex) 0001100 첫번째 경우 4번째(1)에서 count한다. 5번째(1)에선 이전 숫자(1)가 같기 때문에 count 안한다. => 총 1번 두번째 경우 첫번째(0)에서 count한다. + 1 두번째, 세번째에선 count 하지 않음(이전 숫자와 같으니 이미 count가 되어있음) 6번째(0)에서 count한다. + 1 6번째(0)에서 count.. 2023. 1. 25.
[python 백준 5052] 전화번호 목록 접근 방법 숫자 갯수가 작은 순으로 정렬 문자열로 변환 정렬된 순서로 특정 전화번호와 다른 전화번호들을 비교(특정 전화번호 갯수까지 잘라서 그부분만 비교) 같을 경우 YES 출력 후 종료 다를 경우 3번 반복 실패 코드(시간초과) import sys t = int(sys.stdin.readline()) for i in range(t): n = int(sys.stdin.readline()) phone_list = [int(sys.stdin.readline()) for i in range(n)] phone_list.sort() phone_list = list(map(str, phone_list)) index = 0 check = 0 while index < n - 1: if check: break phone.. 2023. 1. 16.
[python 백준 13904] 과제 📜 접근 방법 날짜순으로 오름차순 정렬 제일 긴 마감일 찾기 그 날로부터 가능한 과제 중 제일 높은 점수 고르기 모든 과제 : [1, 20], [2, 50], [3, 30], [4, 60], [4, 40], [4, 10], [6, 5] 6일째에 수행 가능한 과제 : [6, 5] 5일째에 수행 가능한 과제 : X 4일째에 수행 가능한 과제 : [4, 60], [4, 40], [4, 10] 3일째에 수행 가능한 과제 : [3, 30], [4, 40], [4, 10] 2일째에 수행 가능한 과제 : [2, 50], [3, 30], [4, 10] 1일째에 수행 가능한 과제 : [1, 20], [3, 30], [4, 10] 최대 총 점수 : 185 ❌1일차 부터 하면 안되는 이유! 모든 과제 : [1, 20], [.. 2023. 1. 15.