목록그리디 (13)
정화 코딩

https://www.acmicpc.net/problem/25709 #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int ans = 0; string s = to_string(n); string tmps = ""; for (char c: s) { if (c == '1') ans++; else tmps += c; } if (tmps.empty()) n = 0; else n = stoi(tmps); while (n > 0) { int tmp = n..

https://www.acmicpc.net/problem/30805 구현할 때 신경쓸 게 좀 많아서 번거롭다고 느낀 문제였다. 우선 나는 다음과 같이 구현하였다. 일단 이 문제는 그리디로 풀 수 있다. 왜냐하면 구해야 하는 것이 "사전 순 최대" 공통 부분 수열이기 때문이다. 길이만 가장 길어야 하는 거면 dp로 풀어야 하지만, 사전 순으로 했을 때 가장 나중인 것을 선택하면 되므로 그리디하게 공통되는 최댓값을 쭉 선택하면 된다. 다시 정리하자면, 공통되는 수 중 최댓값을 찾고, 그 수의 오른쪽을 기준으로 또 다시 공통되는 수 중 최댓값을 찾고... 를 반복하면 된다. 구체적인 구현은 이렇다. 우선 a 배열에서 최댓값을 찾는다. 찾은 최댓값이 b 배열에도 있는지 확인한다.만약 없다면 아까 a 배열..

https://www.acmicpc.net/problem/23758 #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; priority_queue pq; for (int i = 0; i > x; pq.push(x); } int tmp = n / 2; while (tmp--) pq.pop(); int cnt = 0; while (1) { int cur = pq.top(); pq.pop(); int nxt = cur / 2; ..

https://www.acmicpc.net/problem/11501 #include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { int n; cin >> n; vector a(n); for (int i = 0; i > a[i]; vector b(n); for (int i = 0; i = 0; i--) { if (a[i] >= a[idx]) idx = i; b[i]..

https://www.acmicpc.net/problem/7774 #include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; vector mul1(n); vector mul2(m); for (int i = 0; i > mul1[i]; // a 플러그 -> b 콘센트 for (int i = 0; i > mul2[i]; // b 플러그 -> a 콘센트 sort(mul1.begin(), mul1.end()); sort(mul2.begin(), mul2.end())..

https://www.acmicpc.net/problem/9048 #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { int f, r, n; cin >> f >> r >> n; int ans = 2 * f + (r + 1); vector up(f + 1, 0); vector down(f + 1, r + 1); for (int i = 0; i > a >> b; if (b 처음에는 각 ..

https://www.acmicpc.net/problem/17939 #include #include using namespace std;int n;vector c;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; c = vector(n); for (int i = 0; i > c[i]; int ans = 0; int s = 0; int e = c.size(); while (s = maxv) { maxv = c[i]; maxi = i; } } for (int i = s;..

https://www.acmicpc.net/problem/30645 #include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int r, c, n; cin >> r >> c >> n; vector d(n); for (int i = 0; i > d[i]; } sort(d.begin(), d.end()); vector maxh(c, 0); int idx = 0; int ans = 0; for (int i = 0; i = n) break; maxh[j] = d[idx++]; ..