๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋กDFS (19)

JUINTINATION

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณ ๋“์  Kit - ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(ํƒ€๊ฒŸ ๋„˜๋ฒ„, ๋„คํŠธ์›Œํฌ, ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ, ๋‹จ์–ด ๋ณ€ํ™˜, ์•„์ดํ…œ ์ค๊ธฐ, ์—ฌํ–‰๊ฒฝ๋กœ, ํผ์ฆ ์กฐ๊ฐ ์ฑ„์šฐ๊ธฐ)

1๋ฒˆ ๋ฌธ์ œ: ํƒ€๊ฒŸ ๋„˜๋ฒ„https://school.programmers.co.kr/learn/courses/30/lessons/43165 ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.krํ’€์ดn๊ฐœ์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜๋“ค์„ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ ์ ˆํžˆ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [1, 1, 1, 1, 1]๋กœ ์ˆซ์ž 3์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹ค์„ฏ ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers, ํƒ€๊ฒŸ ๋„˜๋ฒ„ target์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ˆซ์ž๋ฅผ ์ ์ ˆ..

๋ฐฑ์ค€ 14500๋ฒˆ: ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

๋ฌธ์ œ https://www.acmicpc.net/problem/14500 14500๋ฒˆ: ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋„ํ˜•์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€ www.acmicpc.net ํ’€์ด ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ž…๋‹ˆ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋„ํ˜•์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ผญ์ง“์ ๊ณผ ๊ผญ์ง“์ ๋งŒ ๋งž๋‹ฟ์•„ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค. ์ •์‚ฌ๊ฐํ˜• 4๊ฐœ๋ฅผ ์ด์–ด ๋ถ™์ธ ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ฅผ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋ผ๊ณ  ํ•  ๋•Œ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํ•˜๋‚˜๋ฅผ ์ ์ ˆํžˆ ๋†“์•„์„œ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๊ฐ€ ๋†“์ธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š”..

๋ฐฑ์ค€ 1167๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

๋ฌธ์ œ https://www.acmicpc.net/problem/1167 1167๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ํŠธ๋ฆฌ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ์ค„์—์„œ๋Š” ํŠธ๋ฆฌ์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V๊ฐ€ ์ฃผ์–ด์ง€๊ณ  (2 ≤ V ≤ 100,000)๋‘˜์งธ ์ค„๋ถ€ํ„ฐ V๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ„์„ ์˜ ์ •๋ณด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€ www.acmicpc.net ํ’€์ด ์ž…๋ ฅ์œผ๋กœ ๋ฃจํŠธ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฐ„์„ ๋“ค๋กœ ์ค„ ๋•Œ ํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์˜ ๊ธธ์ด์ธ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 1967๋ฒˆ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 1967๋ฒˆ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์€ ์ž…๋ ฅ์—์„œ -1์„ ์ž…๋ ฅํ•  ๋•Œ ๊นŒ์ง€ ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ‘๊ทผ 1967๋ฒˆ ๋ฌธ์ œ์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ์˜ ๊ฐ„์„ ๋“ค์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ..

๋ฐฑ์ค€ 1967๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

๋ฌธ์ œ https://www.acmicpc.net/problem/1967 1967๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n(1 ≤ n ≤ 10,000)์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n-1๊ฐœ์˜ ์ค„์— ๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๊ฐ„์„ ์ด ์—ฐ www.acmicpc.net ํ’€์ด ์ž…๋ ฅ์œผ๋กœ ๋ฃจํŠธ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฐ„์„ ๋“ค๋กœ ์ค„ ๋•Œ ํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์˜ ๊ธธ์ด์ธ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ ‘๊ทผ ํŠธ๋ฆฌ์˜ ๊ฐ„์„ ๋“ค์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ์™€ ๋‘ ๋ฒˆ์งธ๋กœ ๋จผ ๋…ธ๋“œ ์‚ฌ์ด์˜..

๋ฐฑ์ค€ 11728๋ฒˆ: ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋ฌธ์ œ https://www.acmicpc.net/problem/11728 11728๋ฒˆ: ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ ์ฒซ์งธ ์ค„์— ๋ฐฐ์—ด A์˜ ํฌ๊ธฐ N, ๋ฐฐ์—ด B์˜ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 1,000,000) ๋‘˜์งธ ์ค„์—๋Š” ๋ฐฐ์—ด A์˜ ๋‚ด์šฉ์ด, ์…‹์งธ ์ค„์—๋Š” ๋ฐฐ์—ด B์˜ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” ์ ˆ๋Œ“๊ฐ’์ด 109๋ณด๋‹ค ์ž‘๊ฑฐ www.acmicpc.net ํ’€์ด ๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ 2๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ ‘๊ทผ ์ด์ง„ํŠธ๋ฆฌ๋ผ๋Š” ์กฐ๊ฑด๋„ ์—†๊ณ  ์ž์‹๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ์ˆซ์ž๊ฐ€ ํฌ๊ฑฐ๋‚˜ ์ž‘๋‹ค๋Š” ์กฐ๊ฑด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ DFS์™€ BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ..

๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS)

๊ทธ๋ž˜ํ”„(Graph)๋ž€? ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„ G๋Š” (V, E)๋กœ ํ‘œ์‹œ ์ •์ (vertices) ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ๋…ธ๋“œ(node)๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ ๊ฐ„์„ (edge) ์ •์ ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„ ๋งํฌ(link)๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ DFS๋ž€? ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(depth-first search)ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ฐ€๋‹ค๊ฐ€ ๋” ์ด์ƒ ๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐˆ๋ฆผ๊ธธ๋กœ ๋Œ์•„์™€์„œ ์ด ๊ณณ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ ์ง„ํ–‰ ์Šคํƒ(Stack)์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ # ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ DFS depth_first_search(v): v๋ฅผ ๋ฐฉ๋ฌธ๋˜์—ˆ๋‹ค๊ณ  ํ‘œ์‹œ; for all u ∈ (v์— ์ธ์ ‘ํ•œ ์ •์ ) do if (u๊ฐ€ ์•„์ง ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์•˜์œผ๋ฉด) then depth_first_..