목록PS/알고리즘 문제풀이 (157)
득이공간
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsZpmQ/btsEM1fIIYJ/clIPgDP4t5QM9R10uriqtK/img.png)
1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net #include #include using namespace std; priority_queue MinHeap; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = 0; i > Input; if (Input == 0) { if (MinHeap.empty()) { ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vrMu3/btsEFjgbTcN/2CiaQRuZTGy4UhMwohfqtK/img.png)
1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net #include #include #include #include using namespace std; int L, C; vector Alphabets; void DFS(string PW, int CurAlphabetIndex) { if (PW.size() == L) { int Parent = 0; int Child = 0; for (int i = 0; i < L; ++i) { if (PW[i] == 'a' || PW[i] == 'e' || PW[i] == 'i' ||..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/u6AUK/btsEFhJn3ti/1XwkStR0pRxfrwxHMO3X00/img.png)
18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net #include #include using namespace std; int Height[501][501]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M, B; cin >> N >> M >> B; for (int i = 0; i > Height[i][j]; } } int MinT..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sPP3k/btsEGNAPF5Y/Qf56MhQRsWSDcFATcNFNA1/img.png)
1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int A, B; cin >> A >> B; int C, D; cin >> C >> D; int Child, Parent; if (B == D) { Child = A + C; Parent = B; } else { Child = A * D + C * B; Parent = B * D; } int X = max(Child, Parent);..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/H4b6x/btsEFNg1JvP/sFBFKDkyAnnphiWAVMhOxk/img.png)
11689번: GCD(n, k) = 1 자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long N; cin >> N; long long P = N; for (int i = 2; i 1) { P = P - P / N; } cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cM1mOq/btsELtanpuq/KIEsDOmWa7ubnvnxqyJgUK/img.png)
1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net #include using namespace std; bool PrimeNumber[1000001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int M, N; cin >> M >> N; for (int i = 2; i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c0PQdD/btsEFfkvJ9u/cldoNLVcedkuYk6FT4Bfr0/img.png)
11438번: LCA 2 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net #include #include #include #include using namespace std; const int& MaxSize = 100001; const int& MaxK = 20; int K; int MaxDepth; list Neighbors[MaxSize]; int Depth[MaxSize]; int Parent[MaxK][MaxSize]; queue SearchQueue; bool Visited[MaxSize]; void SearchLC..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bffOug/btsEHJko5tq/aKSJM61mfeaZPfjm1GJxAk/img.png)
3584번: 가장 가까운 공통 조상 루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두 www.acmicpc.net #include #include #include using namespace std; const int& MaxSize = 10001; list Children[MaxSize]; pair Tree[MaxSize]; queue SearchQueue; void SearchLCA(int NodeA, int NodeB) { int A = NodeA; int B = NodeB; while (Tree[A].second !..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dTaMFy/btsEFTuxCB6/3KhmKzREevT9mf8lJcAka0/img.png)
11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net #include #include #include using namespace std; const int& MaxSize = 50001; list Neighbors[MaxSize]; pair Tree[MaxSize]; queue SearchQueue; bool Visited[MaxSize]; void SearchLCA(int NodeA, int NodeB) { int A = NodeA; int B = NodeB; while (Tree[A].second != T..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dginaT/btsEFldLSQT/kxafxEIF5Zw3EmBhz168C0/img.png)
11505번: 구간 곱 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 곱을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net #include #include using namespace std; const int& DivNum = 1000000007; int Count, StartIndex; long long MulTree[1048576 * 2]; void UpdateValue(int Index, int Value) { int CurIndex = StartIndex + Index; MulTree[CurIndex] = Valu..