Skip to main content

Algorithm

BOJ 10108 Lazy Fox

·465 words·3 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/10108 ๋ฒˆ์—ญ ๋ฌธ์ œ # ๋‹น์‹ ์€ ๊ฐ„์‹์„ ์ข‹์•„ํ•˜๋Š” ์• ์™„์šฉ ์—ฌ์šฐ๋ฅผ ํ‚ค์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜(๋ฐ์นด๋ฅดํŠธ ํ‰๋ฉด ์œ„์˜ ์ ์œผ๋กœ ํ‘œํ˜„๋จ)์— N๋ช…์˜ ์ด์›ƒ์ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์ด์›ƒ์€ ๋‹น์‹ ์˜ ์• ์™„ ์—ฌ์šฐ์—๊ฒŒ ๊ฐ„์‹์„ ๋‚˜๋ˆ ์ค๋‹ˆ๋‹ค. ๊ฐ ์ด์›ƒ์€ ๋ฌด์ œํ•œ์œผ๋กœ ๊ฐ„์‹์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์ (์—ฌ์šฐ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ์œ„์น˜)์€ ์ด N๊ฐœ์˜ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

BOJ 31740 Split the SSHS 3

·193 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/31740 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„๋Š” ํŠธ๋ฆฌ๋กœ ๋ณด์ธ๋‹ค. ํŠธ๋ฆฌ์—์„œ๋Š” ๋ชจ๋“  ๊ฐ„์„ ์ด ๋‹จ์ ˆ์„ ์ด๋ฏ€๋กœ ํ•˜๋‚˜๋งŒ ์ž˜๋ผ๋„ ๋‘ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋‰˜๋Š”๊ฒƒ์ด ์ž๋ช…ํ•˜๋‹ค. ๊ฐ„์„ ์„ ํ•˜๋‚˜ ์ž๋ฅด๊ณ  ๋‚˜๋ฉด ์„œ๋ธŒํŠธ๋ฆฌ ํ•˜๋‚˜์™€ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ€์ค‘์น˜๋Š” ํŠธ๋ฆฌDP๋ฅผ ํ™œ์šฉํ•ด ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘˜ ์ˆ˜ ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ์ „์ฒด ๊ฐ€์ค‘์น˜ ํ•ฉ์—์„œ ํ•ด๋‹น ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ๋งŒํผ์„ ๋นผ๋ฉด ๋œ๋‹ค. $O(N)$์— ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•ด๋ณด์ธ๋‹ค. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): int dfs(int c, int p){ par[c] = p; DP[c] = W[c]; for(auto nxt : links[c]){ if(nxt == p) continue; DP[c] += dfs(nxt, c); } return DP[c]; } void solve(){ cin >> N; rep(i, 0, N-1){ int u, v; cin >> u >> v; links[u].push_back(v); links[v].push_back(u); } rep(i, 1, N+1) cin >> W[i]; int SUM = dfs(1, -1); int ans = 2e9; pii ans2 = {-1, -1}; rep(i, 2, N+1) if(ans > abs(DP[i] - (SUM - DP[i]))){ ans = abs(DP[i] - (SUM - DP[i])); ans2 = {i, par[i]}; } cout << ans << '\n'; cout << ans2.first << ' ' << ans2.second << '\n'; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 2437 ์ €์šธ

·141 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/2437 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # $1, 2, 4, 8, 16, \cdots$์˜ ์ถ”๋กœ ๋ชจ๋“  ์–‘์˜ ์ •์ˆ˜๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Œ์ด ์ž๋ช…ํ•˜๋‹ค. ์ด ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, $X$๋ผ๋Š” ๋ฌด๊ฒŒ์˜ ์ถ”๊ฐ€ ์žˆ์„๋•Œ, $X-1$๊นŒ์ง€์˜ ๋ชจ๋“  ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์น˜ + 1์ด ๋‹ต์ด ๋œ๋‹ค. ์ถ”๋ฅผ ์ž‘์€๊ฒƒ๋ถ€ํ„ฐ ์ •๋ ฌํ•ด์„œ, ๋น ์ง€๋Š” ์ˆ˜ ์—†์ด ๋ฌด์Šจ ์–‘์˜ ์ •์ˆ˜๊นŒ์ง€ ์ตœ๋Œ€ํ•œ ์žด ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int N; cin >> N; vector<ll> v(N); rep(i, 0, N) cin >> v[i]; sort(all(v)); ll sum = 0; rep(i, 0, N){ if(v[i] > sum + 1){ cout << sum + 1 << "\n"; return; } sum += v[i]; } cout << sum + 1 << "\n"; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 2138 ์ „๊ตฌ์™€ ์Šค์œ„์น˜

·246 words·2 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/2138 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ์ฒซ๋ฒˆ์งธ / ๋งˆ์ง€๋ง‰ ์ „๊ตฌ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”, ๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ๋„๋Š” ๊ทœ์น™์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฒซ๋ฒˆ์งธ ์ „๊ตฌ๋ฅผ ๊ฑด๋“œ๋ฆฐ ๊ฒฝ์šฐ / ์•ˆ๊ฑด๋“œ๋ฆฐ ๊ฒฝ์šฐ ๋‘๊ฐ€์ง€์— ๋Œ€ํ•ด, ๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ๋„๊ณ  ์ „์ฒด๋ฅผ ๋Œ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int N; cin >> N; string S, T; cin >> S >> T; string ret = ""; rep(i, 0, N) ret += (S[i] == T[i] ? "0" : "1"); int ans = 1e9; // don't flip first string tmp = ret; int cnt = 0; rep(i, 1, N){ if(tmp[i-1] == '1'){ cnt++; tmp[i-1] = (tmp[i-1] == '1' ? '0' : '1'); tmp[i] = (tmp[i] == '1' ? '0' : '1'); if(i+1 < N) tmp[i+1] = (tmp[i+1] == '1' ? '0' : '1'); } } if(tmp[N-1] == '0') ans = min(ans, cnt); // flip first tmp = ret; cnt = 1; tmp[0] = (tmp[0] == '1' ? '0' : '1'); tmp[1] = (tmp[1] == '1' ? '0' : '1'); rep(i, 1, N){ if(tmp[i-1] == '1'){ cnt++; tmp[i-1] = (tmp[i-1] == '1' ? '0' : '1'); tmp[i] = (tmp[i] == '1' ? '0' : '1'); if(i+1 < N) tmp[i+1] = (tmp[i+1] == '1' ? '0' : '1'); } } if(tmp[N-1] == '0') ans = min(ans, cnt); if(ans == 1e9) ans = -1; cout << ans << "\n"; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 14939 ๋ถˆ ๋„๊ธฐ

·244 words·2 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/14939 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ๋งจ ์œ—์ค„์„ ์–ด์ฐŒ์ €์ฐŒ ์ผ์ฒ˜๋ฆฌ๋ฅผ ๋๋ƒˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋‘๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ, ๊ทธ ์œ—์ค„์˜ ๋‚จ์€ ์ „๊ตฌ๋ฅผ ๋„๋Š” ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ์นธ ์•„๋ž˜์˜ ์Šค์œ„์น˜๋ฅผ ์ปจํŠธ๋กค ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์ผํ•˜๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งจ ์œ—์ค„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• $= 2^{10} = 1024$๊ฐ€์ง€์— ๋Œ€ํ•ด ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ณ , ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ $100 \times 100 = 10000$๋ฒˆ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์‹œ๊ฐ„ ๋‚ด๋กœ ๋“ค์–ด์˜จ๋‹ค. ๋งจ ์•„๋žซ์ค„์— ์ผœ์ง„ ์ „๊ตฌ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด ์•ˆ๋จ์— ์œ ์˜ํ•œ๋‹ค. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ vector<string> board(10); rep(i, 0, 10) cin >> board[i]; int answer = 1e9; rep(bit, 0, 1<<10){ vector<string> cboard = board; int cnt = 0; auto press = [&](int r, int c){ cnt++; cboard[r][c] = (cboard[r][c] == 'O' ? 'X' : 'O'); if(r > 0) cboard[r-1][c] = (cboard[r-1][c] == 'O' ? 'X' : 'O'); if(r < 9) cboard[r+1][c] = (cboard[r+1][c] == 'O' ? 'X' : 'O'); if(c > 0) cboard[r][c-1] = (cboard[r][c-1] == 'O' ? 'X' : 'O'); if(c < 9) cboard[r][c+1] = (cboard[r][c+1] == 'O' ? 'X' : 'O'); }; rep(c, 0, 10) if(bit & (1 << c)) press(0, c); rep(r, 1, 10) rep(c, 0, 10) if(cboard[r-1][c] == 'O') press(r, c); bool ok = true; rep(c, 0, 10) if(cboard[9][c] == 'O') ok = false; if(ok) answer = min(answer, cnt); } if(answer == 1e9) cout << -1 << '\n'; else cout << answer << '\n'; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 14464 ์†Œ๊ฐ€ ๊ธธ์„ ๊ฑด๋„ˆ๊ฐ„ ์ด์œ  4

·140 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/14464 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ์†Œ์— ๋Œ€ํ•ด์„œ๋Š” ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ์†Œ๋ฅผ, ๋‹ญ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ€์žฅ $T$๊ฐ€ ๋นจ๋ฆฌ ์˜ค๋Š” ๋‹ญ์„ ์“ฐ๋Š” ๊ทธ๋ฆฌ๋””๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” multiset๊ณผ ์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•˜๊ฒ ๋‹ค. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int C, N; cin >> C >> N; multiset<int> chicken; rep(i, 0, C){ int x; cin >> x; chicken.insert(x); } vector<pii> cow(N); rep(i, 0, N) cin >> cow[i].first >> cow[i].second; sort(all(cow), [](pii a, pii b){ return a.second < b.second; }); int ans = 0; for(auto [s, e]: cow){ auto it = chicken.lower_bound(s); if(it != chicken.end() && *it <= e){ ans++; chicken.erase(it); } } cout << ans << '\n'; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 1149 RGB๊ฑฐ๋ฆฌ

·124 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/1149 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ํ˜„์žฌ ์ง‘ $i$๋ฒˆ์˜ ์ƒ‰์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ์ •๋ณด๋Š” $i-1$๋ฒˆ์งธ ์ง‘์˜ ์ƒ‰์ด๋‹ค. ๋”ฐ๋ผ์„œ $\text{DP}[i][j]$๋ฅผ $i$๋ฒˆ์งธ ์น ํ–ˆ์„ ๋•Œ, ์ง‘์˜ ์ƒ‰์ด $j$์ธ ๊ฒฝ์šฐ (๋นจ, ์ดˆ, ํŒŒ)๋กœ ์ •์˜ํ•˜๋ฉด ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. $\text{DP}[i][j] = min_{c \neq j}{\text{DP}[i-1][c] +\text{cost}[i][j]}$ ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ cin >> N; rep(i, 0, N) rep(j, 0, 3) cin >> cost[i][j]; rep(i, 1, N+1) rep(j, 0, 3) DP[i][j] = 1e18; rep(i, 0, N) rep(cur, 0, 3) rep(nxt, 0, 3) if(cur != nxt) DP[i+1][nxt] = min(DP[i+1][nxt], DP[i][cur] + cost[i][nxt]); cout << min({DP[N][0], DP[N][1], DP[N][2]}); } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 11066 ํŒŒ์ผ ํ•ฉ์น˜๊ธฐ

·164 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/11066 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ํŒŒ์ผ $C_i, C_{i+1}, \cdots, C_{j}$๋ฅผ ํ•ฉ์น˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์ž. ์ด๋•Œ, ํ•ด๋‹น ๊ฐ’์€ $\text{DP}[i][j] = min_{i \leq k < j}(\text{DP}[i][k] + \text{DP}[k+1][j])$์ด ์„ฑ๋ฆฝํ•œ๋‹ค. ์ด๋Š” $O(N^3)$์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํžˆ ๋ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” top-down ์žฌ๊ท€ DP๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์กฐ๊ธˆ ๋” ํŽธํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ๋‹ค. TMI) ํฌ๋ˆ„์Šค ์ตœ์ ํ™”๋ฅผ ์ด์šฉํ•ด ๋” ๋น ๋ฅด๊ฒŒ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค! ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): ll calc(int L, int R){ if(L == R) return 0; ll &ret = DP[L][R]; if(ret != -1) return ret; ret = LLONG_MAX; rep(k, L, R) ret = min(ret, calc(L, k) + calc(k+1, R) + (pfsum[R] - pfsum[L-1])); return ret; } void solve(){ cin >> N; rep(i, 1, N+1) cin >> C[i]; rep(i, 1, N+1) pfsum[i] = pfsum[i-1] + C[i]; rep(i, 1, N+1) rep(j, 1, N+1) DP[i][j] = -1; cout << calc(1, N) << '\n'; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 11000 ๊ฐ•์˜์‹ค ๋ฐฐ์ •

·109 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/11000 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ๊ฐ ๊ฐ•์˜๋ฅผ ์„ ๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด, ์„ ๋ถ„์ด ๊ฐ€์žฅ ๋งŽ์ด ๊ฒน์ณ์ง„ ํƒ€์ด๋ฐ์ด ๊ฐ€์žฅ ๋งŽ์€ ๊ฐ•์˜์‹ค์„ ํ•„์š”๋กœ ํ•˜๋Š” ํƒ€์ด๋ฐ์ผ ๊ฒƒ์ด๋‹ค. ์Šค์œ„ํ•‘์„ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฅผ ๊ณ„์‚ฐํ•˜์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int N; cin >> N; vector<pair<int, bool>> events; // {time, isStart} rep(i, 0, N){ events.push_back({s, true}); events.push_back({e, false}); } sort(all(events)); int ans = 0, cnt = 0; for(auto [time, isStart]: events){ if(isStart) cnt++; else cnt--; ans = max(ans, cnt); } cout << ans; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 31498 ์žฅ๋‚œ์„ ์ž˜ ์น˜๋Š” ํ† ์นด ์–‘

·292 words·2 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/31498 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ์ง‘ - ํ† ์นด - ๋Œ๋Œ์ด ํ˜•ํƒœ๋กœ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋งค ์ˆ˜ํ–‰๋งˆ๋‹ค ํ† ์นด๋Š” $B, B-K, B-2*K \cdots$ ๋งŒํผ ์›€์ง์ด๊ณ , ๋Œ๋Œ์ด๋Š” $D$๋งŒํผ ๊ณ„์† ์›€์ง์ธ๋‹ค. ํ† ์นด๊ฐ€ ์žกํžŒ๋‹ค๋ฉด, ๊ทธ ์ˆœ๊ฐ„ ํ† ์นด๊ฐ€ ์›€์ง์ธ ๊ธธ์ด๋Š” $D$๋ณด๋‹ค ์ž‘์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ† ์นด๊ฐ€ ์–ด๋А ์ˆœ๊ฐ„ ์žกํ˜”๋‹ค๋ฉด, ํ† ์นด์™€ ๋Œ๋Œ์ด๊ฐ€ ๊ณ„์† ์›€์ง์ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋Œ๋Œ์ด๋Š” ํ† ์นด๋ณด๋‹ค ํ›จ์”ฌ ์™ผ์ชฝ์— ์žˆ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„์— ํ† ์นด์™€ ๋Œ๋Œ์ด์˜ ์œ„์น˜์— ๋‹จ์กฐ์„ฑ์ด ์กด์žฌํ•œ๋‹ค. ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํ† ์นด๊ฐ€ ์ง‘์— ๋„์ฐฉํ•˜์ง€๋„ ๋ชปํ•˜๋Š” ์ƒํ™ฉ, $K$๊ฐ€ 0์ธ์ƒํ™ฉ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์กฐ์‹ฌํ•˜์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (python): A, B = map(int, input().split()) C, D = map(int, input().split()) K = int(input()) # ํ† ์นด๊ฐ€ ์ง‘์— ๋„์ฐฉํ•  ์ˆ˜๋Š” ์žˆ๋Š”๊ฐ€? # B + (B-K) + (B-2K) + ... >= A if K > 0: # K = 0์ด๋ฉด ๋ฌด์กฐ๊ฑด ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์Œ cnt = B // K # B - cnt * K >= 0 ์ธ ์ตœ๋Œ€ cnt tot = B * (cnt + 1) - K * (cnt * (cnt + 1)) // 2 # B + (B-K) + ... + (B - cnt * K) if tot < A: print(-1) exit(0) # ํ† ์นด๊ฐ€ ์ง‘์— ๋„์ฐฉํ•˜๋Š” ํƒ€์ด๋ฐ์ด ๋Œ๋Œ์ด๋ณด๋‹ค ์ด๋ฅธ๊ฐ€? def toka_move(time): if K > 0: time = min(time, B // K + 1) return B * time - K * (time * (time - 1)) // 2 ok, ng = 10**12, 0 # ํ† ์นด๊ฐ€ ์ง‘์— ๋„์ฐฉํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ํƒ€์ด๋ฐ while ok - ng > 1: mid = (ok + ng) // 2 if toka_move(mid) >= A: ok = mid else: ng = mid if D*ok < A + C: # ์•„์ง ๋Œ๋Œ์ด๊ฐ€ ๋„์ฐฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด print(ok) else: print(-1) ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ