목록Algorithm (236)
HTD
https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #include #include #pragma warning(disable:4996) typedef struct Node { struct Node* prev; struct Node* next; int value; }Node; Node* getNode(int value) { Node* newNode = malloc(sizeof(Node)); newNode->value = value; return ..
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 TwoInt { int n1, n2; }TwoInt; void printNumbers(int* nums, int length) { for (int i = 0; i < length; i++) printf("%d\n", nums[i]); } TwoInt divideNumsWithPivotAndGet..
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 doMerge(int* nums, int left, int right) { int mid = (left + right) / 2; ..
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의 경우의 수를 찾아내야한다. 여..