220512_w4_DFS BFS - Sunny-W-Park/elice-sw2-algorithms GitHub Wiki

๋ฐ•์„ ์šฐ - #2636 ์น˜์ฆˆ

๋ฌธ์ œ ํ•ด์„

  • M, N: ์น˜์ฆˆ ํŒ์˜ ์„ธ๋กœ, ๊ฐ€๋กœ ๊ธธ์ด
  • 1์‹œ๊ฐ„์ด ์ง€๋‚  ๋•Œ๋งˆ๋‹ค 1๋กœ ํ‘œ์‹œ๋œ ๊ตฌ์—ญ์˜ ๊ฒฝ๊ณ„๊ฐ€ 0์œผ๋กœ ๋ฐ”๋€œ
  • 1์ด ๋ชจ๋‘ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ช‡์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š”์ง€, ๋ชจ๋‘ 0์ด ๋˜๊ธฐ ์ „์— ๋‚จ์•„์žˆ๋Š” 1์ด ๋ช‡๊ฐœ์ธ์ง€ ๊ตฌํ•˜๊ธฐ

์ ‘๊ทผ

  • BFS ํ™œ์šฉ
    • 0์˜ ์œ„์น˜ ํƒ์ƒ‰ -> ๋ฐฉ๋ฌธ ์ฒดํฌ
    • 0 ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ์— 1์ด ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ„ -> ๋‹ค์‹œ ๊ฒฝ๊ณ„๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ๋ฌธ ์ฒดํฌ, 1์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
  • BFS 1ํšŒ์—์„œ ์ฒดํฌํ•œ 1์˜ ๊ฐœ์ˆ˜ = 1์‹œ๊ฐ„์ด ์ง€๋‚ฌ์„ ๋•Œ 0์„ 1๋กœ ๋ฐ”๊พผ ํšŸ์ˆ˜

ํ’€์ด ๊ณผ์ •

  • t: ์น˜์ฆˆ ํŒ ์œ„์— 1์˜ ๊ฐœ์ˆ˜ ์ €์žฅ
  • BFS ์ •์˜
  • while๋ฌธ์œผ๋กœ t๊ฐ€ 0์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ bfs๋ฐ˜๋ณต, bfs 1ํšŒ ๋Œ๋•Œ๋งˆ๋‹ค
    • 0์—์„œ 1๋กœ ๋ฐ”๊พผ ํšŸ์ˆ˜๋ฅผ t์—์„œ ์ฐจ๊ฐํ•ด์ฃผ๊ธฐ(ํ•ด๋‹น ๊ฐ’์„ counts ๋ฐฐ์—ด์—๋„ ์ €์žฅ)
    • ์‹œ๊ฐ„ += 1
  • time: ์ด ์†Œ์š” ์‹œ๊ฐ„
  • counts[-1]: ๋งˆ์ง€๋ง‰์— ์ฐจ๊ฐํ•œ ์ˆ˜

๋ฐฑ์„ฑํ˜ธ - #13565 ์นจํˆฌ

๋ฌธ์ œ ํ•ด์„

  • ๊ฒฉ์ž์˜ ํฌ๊ธฐ: M ๊ฐ€๋กœ์ค„์˜ ๊ฐœ์ˆ˜, N ์„ธ๋กœ์ค„์˜ ๊ฐœ์ˆ˜
  • ์ „๋ฅ˜๊ฐ€ ์ž˜ ํ†ตํ•˜๋Š” ๋ฌผ์งˆ์€ 0์œผ๋กœ ์ „๋ฅ˜๊ฐ€ ํ†ตํ•˜์ง€ ์•Š๋Š” ๋ฌผ์งˆ์€ 1๋กœ ํ‘œํ˜„๋œ๋‹ค.
  • ๋ฐ– (๊ฒฉ์ž์˜ ๋งจ ์œ—์ค„)์—์„œ ํ˜๋ ค์ค€ ์ „๋ฅ˜๊ฐ€ ์•ˆ์ชฝ(๊ฒฉ์ž์˜ ๋งจ ์•„๋žซ์ค„)๊นŒ์ง€ ์นจํˆฌ ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์ ‘๊ทผ

  • DFS ํ™œ์šฉ: ๋งจ ์œ—์ค„์— ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•˜์—ฌ 0์ด๋ฉด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ,ํ•˜,์ขŒ,์šฐ๋กœ ์ด๋™ํ•˜๋Š” DFS ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งจ ์•„๋žซ์ค„๊นŒ์ง€ ํƒ์ƒ‰.
  • ๋งŒ์•ฝ์— DFS ์ธ์ž์˜ y๊ฐ’์ด ๋งจ ์•„๋žซ์ค„์„ ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด, flag๋ฅผ โ€œNOโ€์—์„œ โ€œYESโ€๋กœ ๋ณ€ํ™˜.
  • flag ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ

ํ’€์ด ๊ณผ์ •

  • graph๋ฅผ 0๊ณผ 1์„ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ

  • DFS ์ •์˜

    • x , y๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ, x ๋‚˜ y๊ฐ€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฒ—์–ด๋‚  index์ธ ๊ฒฝ์šฐ return์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ.
    • ๋งŒ์•ฝ์— y ์ธ์ž ๊ฐ’์ด m-1์ด๋ผ๋ฉด, ์นจํˆฌ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ flag๋ฅผ โ€œYESโ€๋กœ ๋ฐ”๊พธ๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ.
    • ๋งŒ์•ฝ์— graph์˜ x, y ์ขŒํ‘œ ๊ฐ’์ด 1์ด๋ผ๋ฉด dfs ์žฌ๊ท€๋ฅผ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ return์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ.
    • graph์˜ x,y ์ขŒํ‘œ ๊ฐ’์ด 0์ด๋ผ๋ฉด ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ๋œป์œผ๋กœ ์ขŒํ‘œ๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ๊ณ , ์ƒ/ํ•˜/์ขŒ/์šฐ dfs ํ•จ์ˆ˜ ์žฌ๊ท€ ์‹คํ–‰.
  • ์ฒ˜์Œ์— flag๋ฅผ โ€œNOโ€๋กœ ์ง€์ •ํ•ด์ฃผ๊ณ , ์ฒซ ์ค„์— ๋ชจ๋“  ์›์†Œ๋กœ dfsํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ ์„ฑ๊ณต ์‹œ flag๊ฐ€ โ€œYESโ€๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์‹คํŒจ ์‹œ โ€œNOโ€๋กœ ์œ ์ง€๋จ.

  • ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด flag๋ฅผ ์ถœ๋ ฅ.

์ง€์˜์‹  - #2293 ํ† ๋งˆํ† 

๋ฌธ์ œ ํ•ด์„

  • M, N: ์ƒ์ž ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, ์ƒ์ž ์„ธ๋กœ ์นธ์˜ ์ˆ˜
  • ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค 0์œผ๋กœ ํ‘œ์‹œ๋œ ์ƒ์ž ์นธ์˜ ๊ฐ’์ด 1์˜ ๊ฐ’์— ์ธ์ ‘ํ•˜๋‹ค๋ฉด 1๋กœ ๋ฐ”๋€œ
  • 0์ด ๋ชจ๋‘ 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ช‡์ผ์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ๊ตฌํ•˜๊ธฐ, ๋ชจ๋‘ 1์ด ๋  ์ˆ˜ ์—†๋‹ค๋ฉด -1

์ ‘๊ทผ

  • BFS ํ™œ์šฉ
    • ํ ์‚ฌ์šฉ
    • 1์ด์ƒ์˜ ๊ฐ’์ธ ์นธ์˜ ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ์— 0์ด ์žˆ์œผ๋ฉด ์นธ์˜๊ฐ’ ๋”ํ•˜๊ธฐ 1๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
  • ์ƒ์ž ์นธ์ค‘์— ์ œ์ผ ํฐ ๊ฐ’ == ๋ช‡์ผ ๊ฑธ๋ ธ๋Š”์ง€์˜ ๊ฐ’

ํ’€์ด ๊ณผ์ •

  • q: ํ, ์ฒ˜์Œ์— ์ƒ์ž์— 1์˜ ๊ฐ’๋“ค์˜ ์œ„์น˜ ์ธ๋ฑ์Šค๋“ค์˜ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
  • BFS ์ •์˜
  • while๋ฌธ์œผ๋กœ q๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ bfs๋ฐ˜๋ณต, bfs 1ํšŒ ๋Œ๋•Œ๋งˆ๋‹ค
    • ์ƒํ•˜์ขŒ์šฐ์— 0์˜๊ฐ’(์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ)์ด ์žˆ๋‹ค๋ฉด ์ž๊ธฐ์ž์‹  + 1์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ž…
    • ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์นธ์˜ ์œ„์น˜ ์ธ๋ฑ์Šค ๊ฐ’์„ q์— append
  • BFS๊ฐ€ ๋๋‚˜๊ณ  ์ƒ์ž๋ฅผ ์ˆœํšŒํ•˜์—ฌ ์ œ์ผ ํฐ ๊ฐ’์„ ์ถœ๋ ฅ, ๋งŒ์•ฝ ์ƒ์ž์— 0์ด(๋ชจ๋‘ 1์ด ๋  ์ˆ˜ ์—†๋‹ค) ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด -1 ์ถœ๋ ฅ

๊น€์žฌ๋ฏผ - #2606 ๋ฐ”์ด๋Ÿฌ์Šค

๋ฌธ์ œ ํ•ด์„

  • vertex_cnt, edge_cnt: ์ปดํ“จํ„ฐ ์ˆ˜(๋…ธ๋“œ), ์ปดํ“จํ„ฐ ์—ฐ๊ฒฐ ์ •๋ณด(๊ฐ„์„ ) ์ˆ˜
  • ์ปดํ“จํ„ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋กœ ์ปดํ“จํ„ฐ ์—ฐ๊ฒฐ ์ƒํƒœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ธ์„ ๋•Œ 1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ์„ ๊ฒฝ์šฐ ํ”ผํ•ด๋ฅผ ์ž…์„ ์ปดํ“จํ„ฐ ์ˆ˜ ๋ฐ˜ํ™˜

์ ‘๊ทผ

  • DFS ํ™œ์šฉ
    • 1์˜ ์œ„์น˜์—์„œ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ๋ฅผ Stack์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธ

ํ’€์ด ๊ณผ์ •

  • vertex_list : ์ž…๋ ฅ๋ฐ›์€ vertex_cnt๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ ์ƒ์„ฑ

  • adjacency_list : vertex_list ๊ธธ์ด ๋งŒํผ 2์ค‘ list ์ƒ์„ฑ. index 1 list๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ์˜ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ƒํƒœ

  • visited_vertex : ๋ฐฉ๋ฌธํ•œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ

  • current : ํƒ์ƒ‰ ์ค‘ ํ˜„์žฌ ์œ„์น˜

  • stack : ํ˜„์žฌ ์œ„์น˜์™€ ์ธ์ ‘ํ•œ ์ปดํ“จํ„ฐ ๋ฆฌ์ŠคํŠธ ์ž„์‹œ ์ €์žฅ

  • ํ˜„์žฌ ๋ฌธ์ œ์—์„œ๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธ

  • while๋ฌธ์œผ๋กœ stack์ด ๋น„์–ด์งˆ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

    • stack์— ์ €์žฅ๋œ 1์„ current๋กœ pop
    • for๋ฌธ์—์„œ adjacency_list[1] ์˜ ๋ฆฌ์ŠคํŠธ ์š”์†Œ๊ฐ€ visited_vertex์— ์—†์„ ๊ฒฝ์šฐ (๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ) visited_vertex์— append
  • for๋ฌธ์ด ๋๋‚˜๋ฉด cuurent์— ์žˆ๋Š” ๋‚˜๋จธ์ง€ 1๋„ visited_vertex์— append

  • visited_vertex๋ฅผ set์œผ๋กœ ์ค‘๋ณต์ œ๊ฑฐํ›„ 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ์ œ์™ธํ•œ ์ˆซ์ž ์ถœ๋ ฅ