Skip to main content

Knapsack

BOJ 27421 Make a Loop

·622 words·3 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/27421 ๋ฒˆ์—ญ ๋ฌธ์ œ # Taro๋Š” ์žฅ๋‚œ๊ฐ ์ฒ ๋„ ์„ ๋กœ ์„ธํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์„ ๋กœ๋Š” ์ง๊ฐ ์ค‘์‹ฌ๊ฐ(90๋„ ๊ฐ๋„)์„ ๊ฐ€์ง„ ํ˜ธ ๋ชจ์–‘์ด์ง€๋งŒ, ๋ฐ˜์ง€๋ฆ„์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. Taro๋Š” ์ด ๋ชจ๋“  ์„ ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ ๋กœ ์„ธํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฃจํ”„๋ฅผ ํ˜•์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์„ ๋กœ์˜ ์–‘ ๋์ด ๋‹ค๋ฅธ ์„ ๋กœ์™€ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐ๋˜๊ณ , ๋ชจ๋“  ์„ ๋กœ๊ฐ€ ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“  ์„ ๋กœ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Taro๊ฐ€ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.

BOJ 18214 Reordering the Documents

·719 words·4 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/18214 ๋ฒˆ์—ญ ๋ฌธ์ œ ๋ฒˆ์—ญ # Susan์€ ์‹ํƒ ์ •๋ฆฌ๋Š” ์ž˜ํ•˜์ง€๋งŒ, ์‚ฌ๋ฌด์‹ค ์ฑ…์ƒ ์ •๋ฆฌ๋Š” ์ž˜ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Susan์€ ๋ฐฉ๊ธˆ ์ผ๋ จ์˜ ๋ฌธ์„œ๋“ค์— ๋Œ€ํ•œ ์„œ๋ฅ˜ ์ž‘์—…์„ ๋งˆ์ณค๊ณ , ๋ฌธ์„œ๋“ค์€ ์—ฌ์ „ํžˆ ์ฑ…์ƒ์— ์Œ“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋“ค์€ ์ผ๋ จ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ƒ์‚ฌ๊ฐ€ ๊ฐ€์ ธ์™”์„ ๋•Œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ์€ ์ˆœ์„œ๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š์€๋ฐ, Susan์ด ๋„ˆ๋ฌด ๊ฒŒ์„๋Ÿฌ์„œ ๋”๋ฏธ์—์„œ ๋น ์ ธ๋‚˜์˜จ ๋ฌธ์„œ๋“ค์„ ์ œ์ž๋ฆฌ์— ๋‹ค์‹œ ๋„ฃ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋๋‚ฌ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ณ , ์ƒ์‚ฌ๋Š” ๊ทธ๋…€์—๊ฒŒ ๋ณด๋‚ด๊ณ  ์žˆ๋Š” ๋ฌธ์„œ ์ƒ์ž์— ๋ฌธ์„œ๋“ค์„ ์ฆ‰์‹œ ๋ฐ˜๋‚ฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฌธ์„œ๋“ค์€ ์ผ๋ จ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ž์— ๋ณด๊ด€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

BOJ 26857 Cell Game

·858 words·5 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/26857 ๋ฒˆ์—ญ ๋ฌธ์ œ ๋ฒˆ์—ญ # ๋‘ ํ˜•์ œ Aldo์™€ Bondan์€ COVID-19 ํŒฌ๋ฐ๋ฏน ์ƒํ™ฉ์ด ์•…ํ™”๋˜์–ด ๋„์‹œ๊ฐ€ ๋‹ค์‹œ ๋ด‰์‡„๋˜๋ฉด์„œ ์ง‘์— ๊ฐ‡ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ•™๊ธฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฐฉํ•™ ์ค‘์ด์ง€๋งŒ, ์ง‘ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค๋ฉด ๋ฌด์Šจ ๋ฐฉํ•™์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ์„๊นŒ์š”? ํ•˜์ง€๋งŒ ์ง€๋ฃจํ•จ์€ ์ฐฝ์˜์„ฑ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ง€๋ฃจํ•œ ๋ฐฉํ•™ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

BOJ 31265 ํ›ˆ๋ จ

·186 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/31265 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ์ดํ•ด๊ฐ€ ์กฐ๊ธˆ ์–ด๋ ค์šด๋ฐ, ๊ฒฐ๊ตญ $N$๊ฐœ์˜ ํ›ˆ๋ จ ์ƒํ™ฉ์—์„œ $d$๊ฐœ์˜ ํ›ˆ๋ จ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๋ฅผ ๊ณ„์† ๊ณ ๋ฅด๊ณ , ํ›ˆ๋ จ ์‹œ๊ฐ„์˜ ํ•ฉ์„ ์ตœ๋Œ€ํ™” ํ•˜๊ณ ์‹ถ๋‹ค. ๋ฐฐ๋‚ญ ๋ฌธ์ œ์™€ ๋น„์Šทํ•ด๋ณด์ธ๋‹ค. $d$๊ฐœ์˜ ์„ ํƒ์ง€๊ฐ€ $N$๋ฒˆ ์ฃผ์–ด์ง€๊ณ , ํ›ˆ๋ จ์‹œ๊ฐ„ = ๋ฌด๊ฒŒ์˜ ํ•ฉ์„ ์ตœ๋Œ€ํ™” ํ•ด์•ผํ•œ๋‹ค. ์–ด? ๋‚˜์ด๋ธŒํ•˜๊ฒŒ ํ•˜๋ฉด ํ„ฐ์ง€๋‚˜? ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ•ด์•ผํ•˜๋Š” ์—ฐ์‚ฐ๋Ÿ‰์€ $M * d_i$์ด๋‹ค. ์ด ์—ฐ์‚ฐ๋Ÿ‰์€ $\sum\limits_{i = 1}^N M * d_i \leq 1000 M$ ์ด๋‹ˆ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋‹ˆ!!!!!!!! ์™œํ‹€๋ ธ๋‚˜ ํ–ˆ๋„ค ๊ฐ ํ›ˆ๋ จ ์ƒํ™ฉ์—์„œ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ํ›ˆ๋ จ์„ ๊ณจ๋ผ ํ›ˆ๋ จ ๊ณ„ํš์— ๋„ฃ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ํ•œ ํ›ˆ๋ จ์„ ์—ฌ๋Ÿฌ๋ฒˆ ์“ฐ์ง€ ์•Š๊ฒŒ $M$์— ๋Œ€ํ•ด ์—ญ์ˆœ์œผ๋กœ ๋Œ๋ฉด์„œ, ์ž˜ ์ฒ˜๋ฆฌํ•˜์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ cin >> N >> M; rep(i, 0, N){ cin >> D[i]; tv[i].resize(D[i]); } rep(i, 0, N) rep(j, 0, D[i]) cin >> tv[i][j]; knapsack[0][0] = true; rep(i, 1, N+1) for(auto t: tv[i-1]) rrep(j, 0, M+1) if(j - t >= 0 && (knapsack[i-1][j-t] || knapsack[i][j-t])) knapsack[i][j] = true; rrep(j, 0, M+1) if(knapsack[N][j]){ cout << j; return; } cout << -1; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 30788 Sakura Reflection

·335 words·2 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/30788 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ๋Œ€์นญ์ด๋™์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ?? ์‰ฌ์šด๊ฑฐ๋ถ€ํ„ฐ ํ•ด๋ณด์ž. ์›๋ž˜ ์ ์ด $(x, y)$์— ์žˆ์—ˆ๋‹ค๋ฉด $90\degree$ ์ง์„ ์— ๋Œ€์นญ์‹œํ‚ค๋ฉด $(-x, y)$ $45\degree$ ์ง์„ ์— ๋Œ€์นญ์‹œํ‚ค๋ฉด $(y, x)$ $60\degree$ ์ง์„ ์— ๋Œ€์นญ์‹œํ‚ค๋ฉด $y = \sqrt{3}x$์— ๋Œ€์นญ์ธ๊ฑฐ๋‹ˆ๊นŒ… ์•„๋‹ˆ ์ด๊ฑฐ ๋„ˆ๋ฌด ๊นŒ๋‹ค๋กœ์šด๋ฐ? ํ–‰๋ ฌ์—ฐ์‚ฐ์€ ํ•˜๊ธฐ ์‹ซ์€๋ฐ.. ๊ฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹๊ฒ ๋‹ค. ๊ทน์ขŒํ‘œ๊ณ„์ฒ˜๋Ÿผ, ์›๋ž˜ ์ ์ด $0\degree$์— ์žˆ์—ˆ๋‹ค๋ฉด $60\degree$์— ๋Œ€ํ•ด ๋Œ€์นญ์‹œํ‚ค๋ฉด $120\degree$์— $120\degree$์— ๋Œ€ํ•ด ๋Œ€์นญ์‹œํ‚ค๋ฉด $240\degree$์— ์ด๋Ÿฐ ๋А๋‚Œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์˜ˆ์ œ 1๋ฒˆ์€ $0\degree \rightarrow 120\degree \rightarrow 330 \degree \rightarrow 60 \degree \rightarrow 0$ ์ธ๊ฑฐ ๊ฐ™๋‹ค! $45\degree = 225\degree$๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๊ฐ€๊นŒ์šด ๊ณณ์„ ์ฐพ์•„์„œ ๋‘๋ฐฐ๋กœ ๋„˜๊ธฐ๊ณ , 360์œผ๋กœ ๋ชจ๋“ˆ๋Ÿฌ๋ฅผ ์ทจํ•˜์ž. ์ž, ์ด์ œ ํ•œ๋ฒˆ์”ฉ ์จ์„œ 0๋„๋กœ ๋Œ์•„์˜ค๋Š”๊ฑธ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€? $15\degree$๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฑด $30\degree$ $x\degree$๋ฅผ $a$์— ๋Œ€์นญ์ด๋™์‹œํ‚ค๋ฉด $(2a - x) \degree$๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค! ์ด๊ฑธ ๋˜ $b$์— ๋Œ€์นญ์ด๋™์‹œํ‚ค๋ฉด $(2b - (2a - x))\degree$ ์ธ๊ฑฐ๊ฐ™๊ณ .. ๊ทธ๋Ÿฌ๋ฉด ํ”Œ๋งˆ๋กœ ๋ฐ”๋€Œ์–ด๊ฐ€๋ฉด์„œ ๋”ํ•ด์ง€๋‹ˆ๊นŒ ๊ฒฐ๊ตญ ๋ชจ๋“ˆ๋Ÿฌ 360์— ๋Œ€ํ•ด ๋‘ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆˆ ํ•ฉ์„ ์ผ์ •ํ•˜๊ฒŒ ๋งž์ถœ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ๋กœ ๋ฐ”๋€๋‹ค. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int N; cin >> N; vector<int> A(N); rep(i, 0, N) cin >> A[i]; if(N%2){ cout << "NO"; return; } int sum = 0; for(auto x: A) sum += x; sum %= 360; DP[0][0][0] = true; rep(i, 0, N) rrep(j, 0, N) rep(k, 0, 360) if(DP[i][j][k]){ int nxt = (k + A[i]*2) % 360; DP[i+1][j+1][nxt] = true; DP[i+1][j][k] = true; } if(DP[N][N/2][sum] || DP[N][N/2][(sum + 180) % 360]){ cout << "YES\n"; vector<bool> used(N); int ci = N, cj = N/2, cs = sum; if(!DP[N][N/2][sum]) cs = (sum + 180) % 360; while(cj){ int prv = (cs - A[ci-1]*2) % 360; if(prv < 0) prv += 360; if(DP[ci-1][cj - 1][prv]){ used[ci-1] = true; ci--; cj--; cs = prv; } else ci--; } vector<int> v1, v2; rep(i, 0, N){ if(used[i]) v1.push_back(i+1); else v2.push_back(i+1); } rep(i, 0, N/2){ cout << v1[i] << ' ' << v2[i] << ' '; } } else cout << "NO"; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

BOJ 23569 Friendship Graphs

·537 words·3 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/23569 ๋ฒˆ์—ญ ๋ฌธ์ œ ๋ฒˆ์—ญ # ๋ฌธ์ œ ์„ค๋ช… # ์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ •์ ์ด ์‚ฌ๋žŒ๋“ค์ด๊ณ  ๋‘ ์‚ฌ๋žŒ์ด ์„œ๋กœ ์นœ๊ตฌ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ทธ๋“ค ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์†Œ์…œ ๋„คํŠธ์›Œํฌ๋ผ๊ณ  ํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€ํ•™์˜ ํ•™์ƒ๋“ค์ด๋‚˜ ์ž‘์€ ๋งˆ์„์˜ ์ฃผ๋ฏผ๋“ค๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์˜ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์ž˜ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ช‡ ๋…„๊ฐ„ ์†Œ์…œ ๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์™„์ „ํ•œ ๊ณผํ•™ ๋ถ„์•ผ๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๋Š”๋ฐ, ์ด๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ๊ทธ๋“ค์˜ ํ–‰๋™์— ๋Œ€ํ•œ ๋งŽ์€ ํฅ๋ฏธ๋กœ์šด ์ธก๋ฉด๋“ค์ด ์ด ์นœ๊ตฌ ๊ด€๊ณ„ ๊ทธ๋ž˜ํ”„์˜ ์†์„ฑ์œผ๋กœ ๊ฐ€์žฅ ์ž˜ ์ดํ•ด๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.