알고리즘 3

[백준] 11866: 요세푸스 문제 0 (Python)

11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제보고 이게 먼소린가 싶다냐.. 해서 그려보았다. 문제 분석할때 종이에 슥슥 써보는건 좋은습관인거 같다. 이렇게 그려보니까 무슨 문제인지 바로 파악이 되었다.( 악필 죄송 합니다 ) 그리고 이 문제를 해결하기 위해선 큐를 사용하는게 효율적이라는 것도 깨닫게 되었다. 큐를 사용해서 K와 다른 숫자는 다시 뒤로 append하고, 그 수만 pop한다음에 리스트에 추가하면 수열이 완성되는 방식이었다. FIFO인 큐 자료구조를 문제에 해결방식으로 떠올려서 그걸 이용해 문제를 해결하는게 핵심이었던거 같다. from collections import dequ..

[백준]11279 최대힙 (Python)

11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 본 코드는 파이썬으로 작성되었습니다. 우선순위 큐 라이브러리를 이용하였습니다. 파이썬의 우선순위 큐는 최소기반 힙으로만 작동하지만, put시에 음수로 반전하여 넣고, 꺼낼시에 다시 양수로 전환하여서 사용하면 최대 힙 방식으로 이용할 수 있습니다. 우선순위 큐의 시간복잡도는 n log n 이므로 우선순위를 사용하고 배열을 사용하지 않는 문제에 적합하다 생각됩니다. from queue import PriorityQueue import sys N..

[백준] 1931 회의실 배정 (Python)

1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 본 코드는 파이썬으로 작성되었습니다. 그리디 스러움으로 문제를 해결한다는 것이 뭔지 알게된 좋은 문제라고 생각합니다. 이 문제는 1. 회의가 일찍 끝나며, 2. 끝나는 시간이 같은 경우에는 일찍 시작하는 회의 순으로 리스트를 정렬 해 주는 것이 키포인트 였다고 생각합니다. N = int(input()) arr = [[0 for j in range(2)] for i in range(N)] for i in range(0, len(arr)): arr[i][0], arr[i][1] = map(int, input().split()) arr.sort(key=lambda x: (x[1], ..