알고리즘/백준
-
[백준/BOJ/3015] 오아시스 재결합알고리즘/백준 2024. 5. 24. 21:14
#include #include #include using namespace std;using ll = long long;using pii = pair;int N;vector v;stack s;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; v.resize(N); for (int i = 0; i > v[i]; ll res = 0; for (int h : v) { int cnt = 1; while (!s.empty() && s.top().first
-
[백준/BOJ/28094] 기말고사 작품 전시알고리즘/백준 2024. 5. 22. 21:41
#include #include #include #include using namespace std;int N, M, arr[10][10];int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int tc; cin >> tc; while (tc--) { cin >> N >> M; memset(arr, 0, sizeof(arr)); for (int i = 0; i > v >> a >> b; arr[a][b] += v; } vector p; for (int i = 0; i mxx) { mxx = sum; cnt = 1; } else if (sum == mxx) { cnt++; } ..
-
[백준/BOJ/24432] 카드 놀이알고리즘/백준 2024. 5. 21. 22:26
#include #include #include using namespace std;int N, M, K;vector gen_sums(vector &v, int n) { vector sums; vector perm(n); fill(perm.begin() + n - K, perm.end(), true); do { int sum = 0; for (int i = 0; i > tc; while (tc--) { cin >> N >> M >> K; vector b(N), a(M); for (int i = 0; i > b[i]; for (int i = 0; i > a[i]; vector bs = gen_sums(b, N); vector as = gen_sums(a, M); sort(bs.begin()..
-
[백준/BOJ/2812] 큰 수 만들기알고리즘/백준 2024. 5. 18. 23:38
어이가 없게도 res 를 갱신할 떄, res = s.top() + res; 이런 식으로 채워나갔는데 여기가 시간 초과가 발생하는 지점이었다.#include #include #include #include using namespace std;int N, K;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> K; string num; cin >> num; stack s; for (int i = 0; i 0 && !s.empty() && s.top()
-
[백준/BOJ/12904] A와 B알고리즘/백준 2024. 5. 18. 22:16
#include #include #include using namespace std;int main() { string S, T; cin >> S >> T; while (T.length() > S.length()) { if (T.back() == 'A') { T.pop_back(); } else if (T.back() == 'B') { T.pop_back(); reverse(T.begin(), T.end()); } } int res = 0; if (S.compare(T) == 0) res = 1; cout
-
[백준/BOJ/27361] 막대 자르기알고리즘/백준 2024. 5. 18. 20:27
#include #include #include #include using namespace std;using ll = long long;const ll INF = 1e18;ll __pow(ll p) { return p * p;}int main() { int T; cin >> T; while (T--) { ll N, K, a, b; cin >> N >> K >> a >> b; vector S(N); for (int i = 0; i > S[i]; ll accum = accumulate(S.begin(), S.end(), 0); vector dp(accum + 1, INF); dp[0] = 0; for (int i = 0; i 1) ? (a * __pow(S[i] - 1) + b) : 0..
-
[백준/BOJ/1648] 격자 채우기알고리즘/백준 2024. 5. 12. 21:09
#include #include using namespace std;const int MOD = 9901;int N, M, dp[15*15][1 = N * M) return 0; int &ret = dp[num][status]; if (ret != -1) return ret; ret = 0; if (status & 1) { ret = dfs(num + 1, status >> 1); } else { // 세로 채우기 ret = dfs(num + 1, (status >> 1) | (1 > 2)); } } return ret %= MOD;}int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> M;..