Pattern

BFS
- ๋ฒˆ์ง€๊ธฐ ๋ฌธ์ œ (๋ถˆ, ๋ถ€ํŒจ, ์˜ค์—ผ, ๋ฐ”์ด๋Ÿฌ์Šค ๋“ฑ)
	-> ์ฃผ์–ด์ง€๋Š” ๊ฐ ์œ„์น˜๋ฅผ queue์— ์ถ”๊ฐ€ํ•˜๊ณ  BFS ์‹œ์ž‘
	-> ๋งŒ์•ฝ ์ด๋™ํ•˜๋Š” ๋Œ€์ƒ์ด ๋‘˜์ผ ๋•Œ, ์„œ๋กœ ๋…๋ฆฝ์  ์›€์ง์ž„์ผ ๋•Œ
		-> ํ•˜๋‚˜๋ฅผ ๋๊นŒ์ง€ BFS ๋Œ๋ฆฌ๊ณ , ์ด ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ํ•˜๋‚˜ BFS ์ง„ํ–‰
	  
- ๋ญ‰์ณ์žˆ๋Š” ๋ฉ์–ด๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ (๋ญ‰์ณ์žˆ๋Š” ๊ตฌ์—ญ์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ)
	-> (0,0)๋ถ€ํ„ฐ ๋๊นŒ์ง€ queue์— appendํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰
		-> ๊ทผ๋ฐ ๋ฐฉ๋ฌธ X, ๋ฉ์–ด๋ฆฌ์˜ ๊ฐ ๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์œ„์น˜๋งŒ queue์— append
	-> ์ดํ›„ BFS ๋Œ๋ฆฌ๊ณ , ๊ฐ while์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ๊ฐœ์ˆ˜+1 ํ•ด์ฃผ๋ฉด ์ด ๋ฉ์–ด๋ฆฌ ๊ฐœ์ˆ˜ ๋‚˜์˜ด
	
- State BFS (๋ฒฝ ๋ถ€์ˆ˜๊ธฐ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋“ฑ)
	-> ๋ฒฝ์„ ์ค‘๊ฐ„์— ๋ถ€์ˆ˜๋ฉด์„œ ์ด๋™ํ•œ ๊ฒฝ๋กœ, ๋ฒฝ์„ ์•ˆ ๋ถ€์ˆ˜๋ฉด์„œ ์ด๋™ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•จ
	-> queue์—, ์ค‘๊ฐ„์— ๋ฒฝ์„ ๋ถ€์‰ˆ๋Š”์ง€์˜ flag ๊ฐ’์„ ์ถ”๊ฐ€, (x,y,0or1)๋ฅผ append
	-> (cx,cy,flag)์—์„œ,
		-> (nx,ny)๊ฐ€ ๋ฒฝ์ด ์•„๋‹ˆ๋ฉด ํ˜„์žฌ flag๋ฅผ ๋”ฐ๋ผ์„œ ์ง„ํ–‰
		-> (nx,ny)๊ฐ€ ๋ฒฝ์ด๊ณ , ์•„์ง flag๊ฐ€ 0์ด๋ผ๋ฉด ๋ฒฝ ๋ถ€์ˆ˜๊ธฐ ์‹คํ–‰, flag+=1
	-> ์ค‘์š”ํ•œ ์ : ๊ทธ๋Ÿผ ๋ฒฝ์„ ๋ถ€์ˆœ ๊ฒฝ๋กœ์™€ ์•ˆ ๋ถ€์ˆœ ๊ฒฝ๋กœ ์ค‘์— ๋ญ๊ฐ€ ๋” ์ตœ๋‹จ๊ฑฐ๋ฆฌ์ธ์ง€?
		-> ์–ด์ฐจํ”ผ BFS๋Š” ๋จผ์ € ๋ชฉํ‘œ์— ๋„๋‹ฌํ•œ ๊ฒฝ๋กœ๊ฐ€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ์ž„ (์ด๊ฒŒ ์ค‘์š”)
		-> ๋”ฐ๋ผ์„œ ๊ทธ ๊ฒฝ๋กœ๊ฐ€ ๋ญ๋“  ๊ฐ„์— ๋จผ์ € (n-1, m-1)์— ๋„๋‹ฌํ•˜๋ฉด ์ข…๋ฃŒ
	

DFS

  • Depth-First Search
  • ๊ทธ๋ž˜ํ”„ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜
  • ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœ โ†’ ํ•œ์ชฝ ๋ถ„๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  โ†’ ์ตœ๋Œ€ ๊นŠ์ด๊นŒ์ง€ ํƒ์ƒ‰ โ†’ ์ดํ›„ ๋‹ค๋ฅธ ๋ถ„๊ธฐ๋กœ ์ด๋™ํ•˜์—ฌ ํƒ์ƒ‰
  • ์žฌ๊ท€ ํ•จ์ˆ˜ or ์Šคํƒ ์ด์šฉ
  • FILO ํƒ์ƒ‰
  • ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ๋ฐฉ๋ฌธ X โ†’ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ ๋ฐฐ์—ด ํ•„์š”
  1. ์‹œ์ž‘ํ•  ๋…ธ๋“œ๋ฅผ ์ •ํ•œ ํ›„, ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
    • visit ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”, ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒดํฌ
    • ์Šคํƒ์— ์‹œ์ž‘ ๋…ธ๋“œ push
  2. ์Šคํƒ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ํ›„, ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์Šคํƒ์— ์‚ฝ์ž…
    • ์Šคํƒ์—์„œ ๋…ธ๋“œ๋ฅผ pop โ†’ ํƒ์ƒ‰ ์ˆœ์„œ์— ๊ธฐ๋ก
    • ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ  โ†’ ๋ฏธ๋ฐฉ๋ฌธ ๋…ธ๋“œ๋ผ๋ฉด, ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…
    • ์‚ฝ์ž…ํ•œ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ
  3. ์Šคํƒ์ด ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

BFS

  • Breadth-First-Search
  • ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ โ†’ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธ
  • FIFO ํƒ์ƒ‰ โ†’ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
  • ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ โ†’ ๋ชฉํ‘œ ๋…ธ๋“œ์— ๋„์ฐฉํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ โ†’ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ณด์žฅ
  1. ์‹œ์ž‘ํ•  ๋…ธ๋“œ๋ฅผ ์ •ํ•œ ํ›„, ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”
    • ๊ทธ๋ž˜ํ”„ โ†’ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„
    • visit ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”, ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒดํฌ
    • ํƒ์ƒ‰์„ ์œ„ํ•˜์—ฌ ํ๋ฅผ ์‚ฌ์šฉ โ†’ ์‹œ์ž‘์  push
  2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ํ›„, ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…
    • ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ โ†’ ํƒ์ƒ‰ ์ˆœ์„œ์— ๊บผ๋‚ธ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ก
    • ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ  โ†’ ๋ฏธ๋ฐฉ๋ฌธ ๋…ธ๋“œ๋ผ๋ฉด, ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ํ์— ์‚ฝ์ž…
    • ์‚ฝ์ž…ํ•œ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ
  3. ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
BFS๋ฅผ ์งœ๋Š” ํŒจํ„ด
- ์šฐ์„  ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ DFS์ž„
- distance ๋ฐฐ์—ด๊ณผ visited ๋ฐฐ์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹์Œ
    - visited๋ฅผ [-1]๋กœ ์ดˆ๊ธฐํ™”, ์—ฌ๊ธฐ์„œ ์‹œ์ž‘ ๋…ธ๋“œ index ์œ„์น˜๋ฅผ [0]์œผ๋กœ ์„ค์ •ํ•˜๋ฉด
    - visited, distance ๋ชจ๋‘ ์ฒดํฌ ๊ฐ€๋Šฅ
- queue.pop(), queue.appendleft()
   
1. ์‹œ์ž‘, ์ข…์  ์ž…๋ ฅ
2. visited ๋ฐฐ์—ด, queue ์ดˆ๊ธฐํ™”
3. visited ๋ฐฐ์—ด์— ์‹œ์ž‘์  ์ ์šฉ, queue ์— ์‹œ์ž‘์  append
4. BFS ์‹œ์ž‘
    - ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ "๊ทธ๋ƒฅ ๋‹ค ๋ฐฉ๋ฌธ"์ด๋ฉด while queue: ๋กœ ์กฐ๊ฑด์„ ์žก์œผ๋ฉด ๋จ
    - "ํŠน์ • ์ข…์ ๊นŒ์ง€ ๋„๋‹ฌ"์ด๋ฉด while visited[ํŠน์ •์ข…์ ]==-1: ๋กœ ์žก์œผ๋ฉด ๋จ
    4-1. queue.popํ•ด์„œ cur์— ์ €์žฅ
    4-2. ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ๋‹ค ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ํ™•์ธ
        - ์ƒˆ๋กœ์šด ์œ„์น˜๋ฅผ nx๋ผ๊ณ  ํ•˜๋ฉด, nx=cur+dir[i]
        - nx๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„(๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฒ”์œ„) ์•ˆ์— ์žˆ๋Š”์ง€ ์ฒดํฌ, ์•„๋‹ˆ๋ผ๋ฉด continue
        - position[nx]>0 ์ด๋ฉด continue (์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜, ๋ฐฉ๋ฌธ ์˜ˆ์ •์ธ ๋…ธ๋“œ์ธ์ง€ ์ฒดํฌ)
	        - nx ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋จผ์ € ์ฒดํฌํ•ด์•ผ nx index ์œ„์น˜์˜ position ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ out                of index ์˜ค๋ฅ˜ ์•ˆ ๋‚จ
	    - ์œ„ ์กฐ๊ฑด ๋ชจ๋‘ ์ถฉ์กฑํ–ˆ์œผ๋ฉด, <์œ ํšจ ๋ฒ”์œ„ ๋‚ด> + <์•„์ง ๋ฐฉ๋ฌธ X> ์ด๋ฏ€๋กœ queue.append
5. ์ตœ์ข…์ ์œผ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅ
    - "๊ทธ๋ƒฅ ๋‹ค ๋ฐฉ๋ฌธ" -> visited ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ max ๊ฐ’ ๋ฝ‘๊ณ , ์ถœ๋ ฅ
    - "ํŠน์ • ์ข…์ " -> visited[ํŠน์ •์ข…์ ] ์ถœ๋ ฅ