Skip to main content

Ad_hoc

BOJ 34609 Secret Lilies and Roses

·960 words·5 mins
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/34609 ๋ฒˆ์—ญ ๋ฌธ์ œ # $1$๋ฒˆ๋ถ€ํ„ฐ $n$๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ $n$์†ก์ด์˜ ๊ฝƒ์ด ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ๊ฐ ๊ฝƒ์€ ๋ฐฑํ•ฉ(lily) ๋˜๋Š” ์žฅ๋ฏธ(rose) ์ค‘ ํ•˜๋‚˜์ด๋‹ค. $0$ ์ด์ƒ $n$ ์ดํ•˜์˜ ์ •์ˆ˜ $j$์— ๋Œ€ํ•ด, $l_j$๋ฅผ ์™ผ์ชฝ $j$๊ฐœ์˜ ๊ฝƒ ์ค‘ ๋ฐฑํ•ฉ์˜ ์ˆ˜, $r_j$๋ฅผ ์˜ค๋ฅธ์ชฝ $n - j$๊ฐœ์˜ ๊ฝƒ ์ค‘ ์žฅ๋ฏธ์˜ ์ˆ˜๋ผ ํ•˜์ž.

BOJ 28359 ์ˆ˜์—ด์˜ ๊ฐ€์น˜

·197 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/28359 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ์ผ๋‹จ ๋ชจ๋‘ $P$์— ๋ชฐ์•„๋„ฃ๊ฑฐ๋‚˜, $Q$์— ๋ชฐ์•„๋„ฃ๊ฑฐ๋‚˜๋Š” ๊ฐ€๋Šฅํ•˜๋‹ˆ ์ผ๋‹จ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์ •๋„๋Š” ์—ฌ์œ ๋กญ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋ชจ๋“  ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ์ˆ˜๋Š” $P$์™€ $Q$์— ๋™์‹œ์— ์†ํ•˜๋Š”๋ฐ… ๋™์‹œ์— ์†ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ง€? ๋™์‹œ์— ์†ํ•œ ์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ˆ˜์ผ ์ˆ˜๋Š” ์—†๋‹ค. ์–ด๋–ค ์ˆ˜์™€ ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’์ด ์ตœ๋Œ€์ธ ์ˆ˜๋ฅผ ๊ณจ๋ผ์„œ, ๋งจ ๋’ค๋กœ ๋ณด๋‚ด์ž. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ int N; cin >> N; map<int, int> mp; int ans = 0; rep(i, 0, N){ int x; cin >> x; mp[x]++; ans += x; } int mxIdx = -1, mxVal = -1; for(auto [k, v]: mp){ if(k*v > mxVal){ mxVal = k*v; mxIdx = k; } } ans += mxVal; vector<int> v1, v2; for(auto [k, v]: mp){ if(k < mxIdx) rep(i, 0, v) v1.push_back(k); else if(k > mxIdx) rep(i, 0, v) v2.push_back(k); } rrep(i, 0, v2.size()) v1.push_back(v2[i]); rep(i, 0, mp[mxIdx]) v1.push_back(mxIdx); cout << ans << '\n'; for(auto x: v1) cout << x << ' '; } ๐Ÿ”’ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž ๊ธˆ

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 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 27421 Make a Loop

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

BOJ 34830 ํ˜ธํ˜„์ด์™€ ํŒŒ์ด์ฌ

·151 words·1 min
๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/34830 ๐Ÿง ๊ด€์ฐฐ ๋ฐ ์ ‘๊ทผ # ๋ฌธ์ œ ์ƒํ™ฉ์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด์ž $a, b$๊ฐ€ ์žˆ์„ ๋•Œ, $a - b$ ๋ฅผ ํ•œ๋ฒˆ ์ง€๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. $a, b, c$๊ฐ€ ์žˆ์„ ๋•Œ, $a - b, b- c, c-a$๋ฅผ ํ•œ๋ฒˆ์”ฉ ์ง€๋‚˜๊ฐ€์•ผํ•œ๋‹ค. $a, b,c ,d$๊ฐ€ ์žˆ์„ ๋•Œ, $a-b, a-c, a-d, b-c, b-d, c-d$๋ฅผ ํ•œ๋ฒˆ์”ฉ ์ง€๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ๊ทธ๋ž˜ํ”„ ์ด๋ก ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๊ณ , ๊ฐ ๊ฐ„์„ ์„ ํ•œ๋ฒˆ์”ฉ ์ง€๋‚˜๋˜, ์‹œ์ ๊ณผ ์ข…์ ์ด ๋‹ฌ๋ผ๋„ ๋œ๋‹ค ํ•œ๋ถ“๊ทธ๋ฆฌ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? ์ด์ œ ์ด ๋ฌธ์ œ๋Š” ์˜ค์ผ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋ฐ”๋€๋‹ค. ์˜ค์ผ๋Ÿฌ ๊ฒฝ๋กœ๋Š”, ํ™€์ˆ˜์ ์ด ๋‘๊ฐœ ์ดํ•˜์ผ๋•Œ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ •์ ์ด $N$๊ฐœ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, ๊ทธ๋ž˜ํ”„๋Š” ์™„์ „๊ทธ๋ž˜ํ”„์ด๋ฏ€๋กœ ๊ฐ ์ •์ ์— ๋ถ™์–ด์žˆ๋Š” ๊ฐ„์„ ์€ $N-1$๊ฐœ์ด๋‹ค. $N$์ด ํ™€์ˆ˜๋ผ๋ฉด, ๋ชจ๋“  $N$๊ฐœ์˜ ์ •์ ์€ ์ง์ˆ˜์ ์ด๋‹ค. $N$์ด ์ง์ˆ˜๋ผ๋ฉด, ๋ชจ๋“  $N$๊ฐœ์˜ ์ •์ ์€ ํ™€์ˆ˜์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ, $N-2$๊ฐœ์˜ ์ ๋“ค์„ ์—ฐ๊ฒฐํ•ด์„œ ํ™€์ˆ˜์ ์ด 2๊ฐœ๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“œ๋Š”๊ฒƒ์ด ์ตœ์ ์ด๋‹ค. ๐Ÿ’ป ํ’€์ด # ์ฝ”๋“œ (C++): void solve(){ ll N; cin >> N; ll ans = N * (N-1) / 2; if(N%2 == 0) ans += N/2 - 1; cout << ans; }