목록Algorithm/백준 (224)
Hanbit the Developer
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net #include #include #pragma warning(disable:4996) typedef struct PriortyQueue { int* H; int length; }PriortyQueue; void printNumbers(int* nums, int length) { for (int i = 1; i < length+1; i++) printf("%d\n", nums[i]); } void swapN..
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net #include #include #pragma warning(disable:4996) void printNumbers(int* nums, int length) { for (int i = 0; i < length; i++) printf("%d\n", nums[i]); } void swapNumbers(int* nums, int index1, int index2) { int tmp = nums[index1];..
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net #include #include #pragma warning(disable:4996) void printNumbers(int* nums, int length) { for (int i = 0; i < length; i++) printf("%d\n", nums[i]); } int findMinStartingAt(int* nums, int length, int start) { int minIndex = star..
https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net import sys input = sys.stdin.readline sys.setrecursionlimit(100000) DIV = 10007 NOT_DEFINED = -1 def get_combination(n, k): if k == 0 or k == n: return 1 if dp[n][k] == NOT_DEFINED: dp[n][k] = (get_combination(n-1, k-1) + get_combination(n-1, k)) % DIV return dp[..
https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net import sys input = sys.stdin.readline def update_fenwick_tree(tree, index, value): while index < len(tree): tree[index] += value index += (index & -index) return tree def query_fenwick_tree(..
https://www.acmicpc.net/problem/14939 14939번: 불 끄기 전구 100개가 10×10 정사각형 모양으로 늘어서 있다. 전구에 달린 스위치를 누르면 그 전구와 위, 아래, 왼쪽, 오른쪽에 있는 전구의 상태도 바뀐다. 전구 100개의 상태가 주어지면 모든 전구를 끄 www.acmicpc.net import sys input = sys.stdin.readline dx = [0, 1, 0, -1, 0] dy = [0, 0, 1, 0, -1] INF = 101 def is_turned_on(status, x, y): return status[x] & (1
https://www.acmicpc.net/problem/2981 2981번: 검문 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간 www.acmicpc.net 5, 14를 예시를 들어보자. M이 나누는 숫자고(ex. 3), DIV는 나머지(ex. 2)라고 했을 때, 다음과 같이 표현할 수 있다. 5 = t0*M + DIV 14 = t1*M + DIV (5 = 1*3 + 2, 14 = 4*3 + 2가 그 예시다.) 위 식으로 다음을 도출해낼 수 있다. 9 = (t1 - t0)*M (9 = (4 - 1)*3이 그 예시다.) 우리는 여기서 M의 경우의 수를 찾아내야한다. 여..
https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 일반화에 실패하여 이 문제의 특징을 파악하고자 시간복잡도를 통과하지 못하지만 정확성이 있는 코드를 작성하였다. 0이 8개, 1이 5개가 있을 때의 경우의 수는 무엇일까? 이를 중복조합을 통해 구할 수 있다. 위 사진의 경우에는 5개의 1이 5개의 공간들 중 1개씩 고르면 되므로, c0, c1이 각각 0, 1의 갯수(각각 8, 5)라고 했을 때, 다음의 식으로 구할 수 있다. 이것을 기반으로 코드를 작성..
https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net import sys input = sys.stdin.readline MAX = 101 def w(a, b, c): if dp[a][b][c] == -1: if a 20: dp[a][b][c] = w(20, 20, 20) elif a < b and b < c: dp[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) else: dp[a][b][c] = w..
https://www.acmicpc.net/problem/6549 6549번: 히스토그램에서 가장 큰 직사각형 입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ www.acmicpc.net import sys import math input = sys.stdin.readline sys.setrecursionlimit(1000000) def get_tree_length(N): if N & (N-1) == 0: return 2*N else: return pow(2, math.ceil(math.log(N, 2)) + 1) def i..