๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

    [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..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 2573๋ฒˆ: ๋น™์‚ฐ

    ๋ฌธ์ œ ํ’€์ด DFS๋ฌธ์ œ, ๋‹ค๋งŒ ์กฐ๊ธˆ ๊นŒ๋‹ค๋กญ๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. "๋งŒ์ผ ์ „๋ถ€ ๋‹ค ๋…น์„ ๋•Œ๊นŒ์ง€ ๋‘ ๋ฉ์–ด๋ฆฌ ์ด์ƒ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ 0์„ ์ถœ๋ ฅํ•œ๋‹ค." ํ•ด๋‹น ์กฐ๊ฑด์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„ 62%์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋‚˜์™”๋‹ค. [๋ฐ˜๋ก€] 5 5 0 0 0 0 0 0 2 2 2 0 0 2 2 2 0 0 2 2 2 0 0 0 0 0 0 ๋‹ต : 0 ํ‹€๋ฆฐ ๋‹ต : 3 ๋˜ํ•œ DFS๋กœ ํ’€ ๊ฒฝ์šฐ sys.setrecursionlimit(10**4) setreucrsionlimit์— ๋„ˆ๋ฌด ํฐ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ฃผ์˜ํ•  ๊ฒƒ!! ์ฝ”๋“œ import sys sys.setrecursionlimit(10**4) input = sys.stdin.readline n, m = map(int, input().split()) graph = [..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 2668๋ฒˆ: ์ˆซ์ž๊ณ ๋ฅด๊ธฐ

    ๋ฌธ์ œ ํ’€์ด ์‚ฌ์ดํด์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์•„๋ž˜ ํ’€์ด์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. https://ku-hug.tistory.com/169 [Python] ๋ฐฑ์ค€ 9466๋ฒˆ: ํ…€ ํ”„๋กœ์ ํŠธ ๋ฌธ์ œ ํ’€์ด ์‚ฌ์ดํด์„ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 1. ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ parent ๋ฐฐ์—ด์ด๋ผ ํ•˜์ž. 2. ์‚ฌ์ดํด์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋•Œ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ cycle ๋ฐฐ์—ด์— ์ €์žฅ, ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด visited ๋ฐฐ์—ด์„ ์ƒ ku-hug.tistory.com ์ฝ”๋“œ import sys input = sys.stdin.readline n = int(input()) graph = [0] visited = [False] * (n + 1) cycle = [] ans = [] for _ in range(n): graph.append(int(input())) d..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 9466๋ฒˆ: ํ…€ ํ”„๋กœ์ ํŠธ

    ๋ฌธ์ œ ํ’€์ด ์‚ฌ์ดํด์„ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 1. ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ parent ๋ฐฐ์—ด์ด๋ผ ํ•˜์ž. 2. ์‚ฌ์ดํด์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋•Œ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ cycle ๋ฐฐ์—ด์— ์ €์žฅ, ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด visited ๋ฐฐ์—ด์„ ์ƒ์„ฑ 3. 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ 4. 1๋ฒˆ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ 3๋ฒˆ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ ๋…ธ๋“œ์™€ ์ด์–ด์ง„ ๋…ธ๋“œ๋ฅผ ๊ณ„์† ๋ฐฉ๋ฌธํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ด๊ณ  ์‚ฌ์ดํด ๋ฐฐ์—ด์— ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์œ„ ๊ณผ์ •์„ ์ง์ ‘ ํ•ด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค. ์ฝ”๋“œ import sys sys.setrecursionlimit(10**7) input = sys.stdin.readline def dfs(st): global team visited[st] = True cycle.append(s..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 16929๋ฒˆ: Tow Dots

    ๋ฌธ์ œ ํ’€์ด ์‹œ์ž‘ ์ง€์ ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์ธ ๊ฒฝ์šฐ dfs๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ธธ์ด๊ฐ€ 4 ์ด์ƒ์ด๊ณ  ์‹œ์ž‘ ์ง€์ ์œผ๋กœ ๋Œ์•„์˜จ ๊ฒฝ์šฐ "Yes"๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ import sys input = sys.stdin.readline n, m = map(int, input().split()) graph = [list(input().rstrip()) for _ in range(n)] tempVisited = [[False] * m for _ in range(n)] dir = ((0, 1), (0, -1), (1, 0), (-1, 0)) def dfs(c, sti, stj, nowi, nowj, cnt): for dx, dy in dir: ni, nj = nowi + dy, nowj + dx if (sti, stj) == (ni, n..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1987๋ฒˆ: ์•ŒํŒŒ๋ฒณ

    ๋ฌธ์ œ ํ’€์ด dfs + ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ํ’€์—ˆ๋‹ค. pypy๋กœ ์ œ์ถœ ์ค‘๋ณต๋œ ๋ฌธ์ž๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด alpha ๋ฐฐ์—ด ์ƒ์„ฑ (alpha[0] = True์ธ ๊ฒฝ์šฐ A์นธ์„ ์ง€๋‚ฌ๋‹ค๋Š” ์˜๋ฏธ) alpha = [False] * 26 ord('A') - 65 ์ด๋Ÿฐ ์‹์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถฐ์ฃผ์—ˆ๋‹ค. ๊ทธ ํ›„ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ–ˆ๋‹ค. ์ฝ”๋“œ import sys input = sys.stdin.readline r, c = map(int, input().split()) graph = [list(input().rstrip()) for _ in range(r)] alpha = [False] * 26 dir = ((0, 1), (0, -1), (1, 0), (-1, 0)) ans = 0 def condition(ni, nj): return ni < 0 or ..

    [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1068๋ฒˆ: ํŠธ๋ฆฌ

    ๋ฌธ์ œ ํ’€์ด ์ž…๋ ฅ๋ฐ›์€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” child ๋ฐฐ์—ด์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ child ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค. n = int(input()) parent = list(map(int, input().split())) delNode = int(input()) child = [[] for _ in range(n)] for idx in range(n): if parent[idx] == -1 or idx == delNode: continue child[parent[idx]].append(idx) ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋ฆฌํ”„ ๋…ธ๋“œ์ž„์„ ์˜๋ฏธ ์ œ๊ฑฐํ•  ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ์ „๋ถ€ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋…ธ๋“œ์— -1 ๋Œ€์ž… def dfs(d): # ๋ฆฌํ”„ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ if ch..