๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1208๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ 2

    ๋ฌธ์ œ ํ’€์ด 1. ์ฃผ์–ด์ง„ ์ˆ˜์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. [-7, -3, -2, 5, 8] -> [-7, -3], [-2, 5, 8] 2. ๋‚˜๋ˆ ์ง„ ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค. A : [-7, -3] -> [-7], [-3], [-7, -3] B : [-2, 5, 8] -> [-2], [5], [8], [-2, 5], [-2, 8], [5, 8], [-2, 5, 8] 3. A์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ณ , B์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ชจ๋“  ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ex) [-7, -3, 5] = [-7, -3] + [5] 4. A, B ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. sumA : [-7, -3, -10] sumB : [-2, 3, 5, 6, 8, 11, 13] 5. sumA, sumB ๊ทธ๋ฆฌ๊ณ  su..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 15732๋ฒˆ: ๋„ํ† ๋ฆฌ ์ˆจ๊ธฐ๊ธฐ

    ๋ฌธ์ œ ํ’€์ด ์ž…๋ ฅ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๋•Œ, 200 2 5 100 150 10 110 150 15 ์ƒ์ž์˜ ๋ฒˆํ˜ธ๋Š” 0 ~ 200๊นŒ์ง€ ์žˆ๋‹ค. ์šฐ์„  ์ค‘๊ฐ„ ๊ฐ’(100)์„ ๊ตฌํ•˜๊ณ , 0๋ฒˆ ์ƒ์ž์—์„œ 100๋ฒˆ ์ƒ์ž๊นŒ์ง€์˜ ๋„ํ† ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๋„ํ† ๋ฆฌ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ import sys input = sys.stdin.readline #๋„ํ† ๋ฆฌ ์ˆ˜ ๊ตฌํ•˜๊ธฐ def calAcorn(rules, boxNum): cnt = 0 for start, end, margin in rules: if boxNum < start: continue end = min(boxNum, end) cnt += (end - start) // margin + 1 return cnt def binarySearch(rules, end, ..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 10942๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ?

    ๋ฌธ์ œ ํ’€์ด dp[i][j] : i ~ j๊นŒ์ง€์˜ ์ˆ˜์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์ €์žฅ ex) dp[1][3] = True : 1 ~ 3๊นŒ์ง€์˜ ์ˆ˜์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜ arr ๋ฐฐ์—ด์— ์ „์ฒด ์ˆ˜์—ด ์ €์žฅ 1. ์›์†Œ๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜ dp[0][0], dp[1][1], ... dp[n][n] = True 2. arr[i] == arr[i+1]์ธ ๊ฒฝ์šฐ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜ (๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๊ฐ€ 2์ด๊ณ , ์›์†Œ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ) ex) 11, 22, 33, 44 ๋Š” ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜ 3. a~b๊นŒ์ง€์˜ ์ˆ˜์—ด์—์„œ arr[a] == arr[b]์ด๊ณ  ๊ทธ ์‚ฌ์ด์˜ ์ˆ˜์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ๊ฒฝ์šฐ ์›์†Œ๊ฐ€ 4๊ฐœ์ธ ๊ฒฝ์šฐ, 5๊ฐœ์ธ ๊ฒฝ์šฐ ... ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ import sys input = sys.stdin.readline n = int(input()) a..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1695๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ / ํŒŒ์ด์ฌ ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ ํ•ด๊ฒฐ

    ๋ฌธ์ œ ํ’€์ด 1. ์ฃผ์–ด์ง„ ์ˆ˜์—ด์—์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค. 12342์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ํŒฐ๋ฆฐ๋“œ๋กฌ์€ 242(12342)์ด๋‹ค. 2. ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์ • ๊ฐ€์šด๋ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์—ด์„ ๋‚˜๋ˆˆ๋‹ค. 123 4 2 3. ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹Œ ์ˆ˜๋ฅผ ๋ฐ˜๋Œ€ํŽธ์— ์ถ”๊ฐ€ํ•œ๋‹ค. 123 4 321 ์ˆ˜์—ด์—์„œ ์ด๋ฏธ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ์ˆ˜์—ด์„ ๊ตฌํ–ˆ๊ณ , ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹Œ ์ˆ˜๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋˜๋‹ค๋ฅธ ์˜ˆ์‹œ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ฐพ๋Š” ๊ณผ์ •์—์„œ DP๊ฐ€ ์ด์šฉ๋œ๋‹ค. [์ˆ˜์—ด A] 12342 [์ˆ˜์—ด A๋ฅผ ๋’ค์ง‘์€ ์ˆ˜์—ด B] 24321 ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ˆ˜์—ด A์™€ ์ˆ˜์—ด B์˜ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด(LCS)์ด ๊ณง ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜์—ด์ด๋‹ค. (์ˆ˜์—ด A๋ฅผ ๋’ค์ง‘์—ˆ์„ ๋•Œ์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด = ์ˆ˜์—ด A์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ด๋ฏ€๋กœ, ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜์—ด์˜ ์กฐ๊ฑด์„ ์ƒ๊ฐํ•ด๋ด๋ผ) ๋ง๋กœ ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ์ฐธ ์–ด๋ ต๋‹ค... ..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 17404๋ฒˆ: RGB๊ฑฐ๋ฆฌ 2

    ๋ฌธ์ œ ํ’€์ด ์ฒซ ๋ฒˆ์งธ ์ง‘์˜ ์ƒ‰์„ R๋กœ ์„ ํƒํ•˜๊ณ  DP๋ฅผ ํ†ตํ•ด ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค. G, B์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ์ฝ”๋“œ import sys input = sys.stdin.readline n = int(input()) arr = [list(map(int, input().split())) for _ in range(n)] def minPaint(selHouse): dp = [[0] * 3 for _ in range(n)] dp[0] = arr[0] for i in range(3): if i == selHouse: dp[1][i] = 1e9 continue dp[1][i] = arr[1][i] + arr[0][selHouse] for i in range(2, n): dp[i][0] = min(dp[i - 1][1], dp[i..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 14942๋ฒˆ: ๊ฐœ๋ฏธ

    ๋ฌธ์ œ ํ’€์ด 1. ์ฃผ์–ด์ง„ ์ž…๋ ฅ์€ ์–‘๋ฐฉํ–ฅ ๊ฐ„์„ ์ด๋ฏ€๋กœ ๋‹จ๋ฐฉํ–ฅ ๊ฐ„์„ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผํ•จ 2. ํฌ์†Œ๋ฐฐ์—ด ์‚ฌ์šฉ https://hello-capo.netlify.app/algorithm-sparse-table/ ๐Ÿงฉ [Algorithm] ํฌ์†Œ ๋ฐฐ์—ด(Sparse Table) ์•Œ๊ณ ๋ฆฌ์ฆ˜ | hello-capo! ํฌ์†Œ ๋ฐฐ์—ด(Sparse Table) ๋ฐฐ์—ด ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฌด์กฐ๊ฑด ๋ฐฐ์—ด์˜ length ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์€ ํฌ์†Œ ํ–‰๋ ฌ๊ณผ ๊ฐ™์ด, ํฌ์†Œ ๋ฐฐ์—ด์€ ๋ฐฐ์—ด์˜ ์›์†Œ ์œ„์น˜๊ฐ€ ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๋ฐฐ hello-capo.netlify.app 3. LCA์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋…ธ๋“œ ํƒ์ƒ‰ https://cyberflower.github.io/2019/07/22/LCA.html LCA(Least Common Ancestor)..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 16437๋ฒˆ: ์–‘ ๊ตฌ์ถœ ์ž‘์ „

    ๋ฌธ์ œ ํ’€์ด ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•˜๋ฏ€๋กœ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋Š” ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค. ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ์ด๋™ํ•˜๊ณ , ๋ฆฌํ„ด ๊ฐ’์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ์ฝ”๋“œ import sys sys.setrecursionlimit(10**9) input = sys.stdin.readline n = int(input()) tree = [[] for _ in range(n + 1)] for i in range(2, n + 1): type, amount, root = input().split() amount, root = int(amount), int(root) if type == 'W': amount = -amount tree[root].append((i, amount)) def dfs(x, amount): for next, nex..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 17616๋ฒˆ: ๋“ฑ์ˆ˜ ์ฐพ๊ธฐ

    ๋ฌธ์ œ ํ’€์ด ๋“ฑ์ˆ˜๋ฅผ ์ฐพ์„ ๋…ธ๋“œ ์œ„๋กœ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€, ์•„๋ž˜๋กœ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ import sys sys.setrecursionlimit(10**9) input = sys.stdin.readline n, m, x = map(int, input().split()) up = [[] for _ in range(n + 1)] down = [[] for _ in range(n + 1)] for _ in range(m): a, b = map(int, input().split()) down[a].append(b) # a ์•„๋ž˜์— b up[b].append(a) # b ์œ„์— a visited = [False] * (n + 1) def dfs(x, graph, cnt): visited[x] ..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 16947๋ฒˆ: ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„ 

    ๋ฌธ์ œ ํ’€์ด ๋จผ์ € ์‚ฌ์ดํด์„ ๊ตฌํ•œ๋‹ค. ์‚ฌ์ดํด์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ณ , ๊ธธ์ด๋Š” 3 ์ด์ƒ ์ด์–ด์•ผ ํ•œ๋‹ค. for i in range(1, n + 1): if not visited[i]: tmp = [] if dfs(i, tmp): print(cycle) break def dfs(x, tmp): global cycle visited[x] = True tmp.append(x) for next in graph[x]: if visited[next]: if next in tmp: if len(tmp[tmp.index(next):]) >= 3: cycle = set(tmp[tmp.index(next):]) return True continue dfs(next, tmp) tmp.pop() ์‚ฌ์ดํด์„ ์ด๋ฃจ๋Š” ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊นŠ์ด๋ฅผ ..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ

    ๋ฌธ์ œ ํ’€์ด ๋ฐฑ์ค€ LCA ๋ฌธ์ œ์™€ ๋™์ผํ•œ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹ˆ์—ˆ๋‹ค. https://www.acmicpc.net/problem/11437 11437๋ฒˆ: LCA ์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง€๊ณ , ๋‹ค์Œ N-1๊ฐœ ์ค„์—๋Š” ํŠธ๋ฆฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์„ ์•Œ๊ณ ์‹ถ์€ ์Œ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง€๊ณ , ๋‹ค์Œ M๊ฐœ ์ค„์—๋Š” ์ • www.acmicpc.net ์ฐจ์ด์ ์€ LCA์˜ ๊ฒฝ์šฐ ์–‘๋ฐฉํ–ฅ ๊ฐ„์„ ์œผ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€์ง€๋งŒ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์˜ ๊ฒฝ์šฐ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„์„ ์ด ์ฃผ์–ด์ง„๋‹ค. ๋˜ํ•œ LCA๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ 1๋กœ ๊ณ ์ •๋˜์ง€๋งŒ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ import sys sys.setrecursionlimit(10**9) input = sys.stdin..