๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿƒ algorithm/programmers10

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 3 - ๋‹จ์–ด ๋ณ€ํ™˜ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‹จ์–ด ๋ณ€ํ™˜ ํ’€์ด ๊ณผ์ • ์‹œ์ž‘ ๋‹จ์–ด์—์„œ ๋ชฉํ‘œ ๋‹จ์–ด๋กœ ๋ณ€ํ˜•ํ•˜๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ(๋น„์šฉ)์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋‹จ์–ด๋Š” ์ตœ๋Œ€ ํ•œ ๋ฌธ์ž๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋œ ๋‹จ์–ด์ผ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ๋‹จ์–ด๋กœ ๋ณ€ํ™˜์„ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ํƒ์ƒ‰๋งˆ๋‹ค ๋‹จ์–ด์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜์—ฌ a to z ์ค‘ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ๋”ฐ์ ธ์ค๋‹ˆ๋‹ค. ์ด๋•Œ Python ์—์„œ๋Š” ord & chr ๋ฅผ ํ†ตํ•ด์„œ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฌธ์ž์—ด์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ค‘๋ณต๋œ ๋ณ€ํ™˜์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด visit ์€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์„ ์–ธํ•˜์—ฌ ๋ฌธ์ž์—ด ํ•ด์‹ฑ ์„ ํ†ตํ•ด ์ด๋ฏธ ๋ณ€ํ™˜์„ ์‹œ๋„ํ–ˆ๋˜ ๋‹จ์–ด์ธ์ง€ ํšจ์œจ์ ์œผ๋กœ ํŒ๋‹จํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ from collections import deque def bfs.. 2021. 3. 1.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 2 - ํƒ€๊ฒŸ ๋„˜๋ฒ„ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํƒ€๊ฒŸ ๋„˜๋ฒ„ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ์ˆ˜์— ๋ง์…ˆ๊ณผ ๋บ„์…ˆ์„ ํ™œ์šฉํ•ด์„œ ๋ชฉํ‘œ ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ 20๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  2๊ฐ€์ง€ ์—ฐ์‚ฐ๋ฐ–์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ตœ๋Œ€ 2^20 ๊ฐœ์˜ ์ƒํƒœ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋žต 1000000 ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ DFS ๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์„ธ์–ด์คฌ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ def dfs(numbers, depth, here, target): if depth == len(numbers): return 1 if here == target else 0 ret = 0 for operand in [-numbers[depth], numbers[depth]]: ret += dfs(numbers, depth+1, here.. 2021. 3. 1.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 3 - ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋„คํŠธ์›Œํฌ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ์ธ์ ‘ํ–‰๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์ปดํฌ๋„ŒํŠธ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ •์ ๋ณ„๋กœ DFS ํƒ์ƒ‰์„ ํ†ตํ•ด ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•ด์ฃผ๋ฉด ํ•ด๋‹น ์ •์ ์ด ์†ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด DFS ํƒ์ƒ‰์ด ๋ช‡๋ฒˆ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํŒŒ์•…ํ•œ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ def dfs(n, adj, visit, here): visit[here] = 1 for there in range(n): if adj[here][there] and not visit[there]: dfs(n, adj, visit, there) def solution(n, computers): visit = [0 for _ in range(n)] network = 0 for v in.. 2021. 3. 1.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 3 - ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ ํ’€์ด ๊ณผ์ • ์ž์—ฐ์ˆ˜ n ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ดํ•ฉ์ด S๊ฐ€ ๋˜๋ฉฐ ๋™์‹œ์— ๊ฐ ์›์†Œ์˜ ๊ณฑ์ด ์ตœ๋Œ€์ธ ์ง‘ํ•ฉ์„ ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ํ•ฉ S๊ฐ€ 1์–ต์ด๊ณ  ์ž์—ฐ์ˆ˜ n์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 10,000 ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•์€ ์‹œ๊ฐ„๋‚ด์— ์ˆ˜ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ์š”? ๋ฐ”๋กœ ํƒ์š•์ ์ธ ์„ ํƒ ์œผ๋กœ ์ตœ์ ์˜ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ด k ๊ฐœ์˜ j ํ•ฉ์ด S ๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. j j j ... j => ์ด k ๊ฐœ์ด๋ฉฐ ํ•ฉ์ด S, ๋”ฐ๋ผ์„œ j\*k = Sํ•ฉ์ด S๊ฐ€ ๋˜๋Š” ์ˆซ์ž์˜ ์กฐํ•ฉ์€ ์ƒ๋‹นํžˆ ๋‹ค์–‘ํ•˜๋ฏ€๋กœ ์ด๋ฒˆ์—๋Š” j์— ์ž„์˜์˜ ์–‘์˜ ์ •์ˆ˜ l ๋งŒํผ ๊ฐ’์ด ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. j-.. 2021. 3. 1.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 2 - ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ ํ’€์ด ๊ณผ์ • k ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ธŒ๋ฃจํŠธ ํฌ์Šค ๋กœ ์ ‘๊ทผํ•ด ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๋ฉด ์ตœ๋Œ€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋‚ด์— ์ˆ˜ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ํฐ ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์œผ๋กœ ๊ฐ ์ˆซ์ž๋ฅผ ํƒ์š•์ ์ธ ์„ ํƒ ์— ๋”ฐ๋ผ ์ œ๊ฑฐํ•ด์ค€๋‹ค๋ฉด ์„ ํ˜• ์‹œ๊ฐ„๋‚ด์— ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํƒ์š•์ ์ธ ์„ ํƒ ์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๊ฐ€ ์ ˆ๋Œ€ ์†ํ•ด๋ณด๋Š” ์ผ์ด ์—†์Œ์„ ์ฆ๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์•ผํ•จ์€ ์ž๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํฐ ์ž๋ฆฌ์ˆ˜ ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ (์ธ๋ฑ์Šค๋กœ ๋”ฐ์ง€๋ฉด 0 ๋ถ€ํ„ฐ) ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ฐ ์ˆซ์ž๋“ค์˜ ์ •๋‹น์„ฑ์„ ๋”ฐ์ ธ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” .. 2021. 3. 1.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 3 - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ ํ’€์ด ๊ณผ์ • ๋ชจ๋“  ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST)๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ”„๋ฆผ๊ณผ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ํฌ๋ฃจ์Šค์นผ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„์„  ์ •๋ณด๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค€ ๋‹ค์Œ, ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ๋“ค์„ ํƒ์š•์ ์œผ๋กœ ์„ ํƒํ•ด์ค€๋‹ค. ์ด๋ฅผ ์œ„ํ•œ union-find ์ž๋ฃŒ๊ตฌ์กฐ๋งŒ ์‹ ๊ฒฝ์จ์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฌด๋‚œํžˆ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ฝ”๋“œ def union(p, u, v): u, v = find(p, u), find(p, v) if u == v: return p[u] = v def find(p, u): if p[u] == u: return u p[u] = find(p, p[u]) return p[u] def kruskal(v, edges): ans.. 2021. 3. 1.