본문 바로가기

algorithm

(198)
[BOJ] 10974번 모든 순열 (C++) https://www.acmicpc.net/problem/10974 10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net sol 1) next_permutation을 이용 #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; vector v; for(int i = 0; i < n; i++){ v.push_back(i + 1); } do{ for(int i = 0; i < n; i++){ cout
[BOJ] 11659번 구간 합 구하기 4 (C++) https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m, num, x, y; cin >> n >> m; vector v(n + 1); for(int i = 1; i > num; v[i] = v[i - 1] + num..
[BOJ] 17298번 오큰수 (C++) https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, num; cin >> n; vector v; stack s; vector res; for(int i = 0; i > num; v.push_back(num..
[BOJ] 20126번 교수님의 기말고사 (C++) https://www.acmicpc.net/problem/20126 20126번: 교수님의 기말고사 교수님이 시험을 시작할 수 있는 시각을 출력하여라. 시작 가능한 시각이 여러 개 있으면 그중 가장 앞선 시각을 출력한다. 시험을 치룰 수 없다면 -1을 출력하여라. www.acmicpc.net #include #include #include using namespace std; int main() { int n, m, s, x, y; vector v; cin >> n >> m >> s; for(int i = 0; i > x >> y; v.push_back({x, y}); } sort(v.begin(), v.end()); // 1. 앞쪽에 시간이 비는 경우 if(v[0].firs..
[BOJ] 24523번 내 뒤에 나와 다른 수 (C++) https://www.acmicpc.net/problem/24523 24523번: 내 뒤에 나와 다른 수 첫째 줄에 수열 $A$의 크기 $N$이 주어진다. 둘째 줄에는 $A_1 \ A_2 \ \cdots \ A_N$이 공백으로 구분되어 주어진다. $(1 \le N \le 10^6$, $-10^9 \le A_i \le 10^9 )$ 입력으로 주어지는 모든 수는 정수이다. www.acmicpc.net #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, num; vector v; stack s; vector res; cin >> n; ..
[BOJ] 2493번 탑 (C++) https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; stack s; int num; for (int i = 0; i > num; while (!s.empty()) { if (s.top()...
[BOJ] 15988번 1, 2, 3 더하기 3 (C++) https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net #include using namespace std; int main() { int n, num; long long dp[1000001] = {0, 1, 2, 4}; for(int i = 4; i > n; for(int i = 0; i > num; cout
[BOJ] 10868번 최솟값 (C++) https://www.acmicpc.net/problem/10868 10868번: 최솟값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 www.acmicpc.net #include #include using namespace std; long long arr[100001]; long long *tree; void init(int node, int start, int end) { if (start == end) { tree[node] = arr[start]; return; } init(2 * node, start, (star..