๐์๊ณ ๋ฆฌ์ฆ
[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..