• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

[๋ฐฑ์ค€] 5014

18 Mar 2021

๋ฌธ์ œ

์Šคํƒ€ํŠธ๋งํฌ

๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ๋‘ ๋ฐฉํ–ฅ๋งŒ ์กด์žฌํ•˜๋Š” BFS ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

  • ์™œ BFS์ธ๊ฐ€? : ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•œ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐœ์˜ ๊ธธ์„ ๋๊นŒ์ง€ ํŒŒ๊ณ ๋“œ๋Š” DFS์™€ ๋‹ฌ๋ฆฌ, BFS๋Š” ํ•œ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ธธ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์žฅ ๋จผ์ € Goal์— ๋„์ฐฉํ•˜๋Š” ๋ฃจํŠธ๊ฐ€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„ ์•ˆ์— ๊ฐˆ๊ฑฐ๋ผ๋Š” ํ™•์‹ ์ด ์žˆ์—ˆ๋‚˜์š”? : ๋„ค. ์ตœ๋Œ€ Final ์ธต์ด 10^6์ธต์ด๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ๋”๋ผ๋„ visited ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ๋ฐฉ๋ฌธํ•ด๋ณด๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— 10^6์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. bfs ์•ˆ์—์„œ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋งŒ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋ก ์ƒ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ์ดˆ๊ณผํ•˜์ง„ ์•Š์•˜๋Š”์ง€? : ์•ˆ๊ทธ๋Ÿด๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 256MB๋กœ ๋ฉ”๋ชจ๋ฆฌ์ œํ•œ์ด ๋„‰๋„‰ํ•œ ํŽธ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์˜ ๋ฐ์ดํ„ฐํƒ€์ž… ๋ณ„ ํฌ๊ธฐ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€๋Š” ํ™•์‹ ํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, ๋Œ€๋žต boolean์„ ๋„‰๋„‰ํžˆ 1๋ฐ”์ดํŠธ๋กœ ์ƒ๊ฐํ•˜๋”๋ผ๋„ 10^6(MB) ์งœ๋ฆฌ ๋ฐฐ์—ด์„ 256๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์–‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฒซ ์‹œ๋„ : ์‹œ๊ฐ„์ดˆ๊ณผ

์ œ๊ฐ€ ํ‹€๋ ธ๋˜ ๋ถ€๋ถ„์€ ์–ด๋””์—์„œ ๋ฐฉ๋ฌธ์„ ๊ธฐ๋กํ•ด์•ผ ํ•˜๋Š”๊ฐ€?์˜ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธํ•  ๋…ธ๋“œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” queue์— ๋„ฃ์œผ๋ฉด์„œ ๋™์‹œ์— ๋ฐฉ๋ฌธ ๊ธฐ๋ก๊นŒ์ง€ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๋Š” ์‹œ์ ์—์„œ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ํ•ด์ฃผ์–ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

BFS์—์„œ๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊นŒ๋‹ญ์— ์„ ์ž…์„ ์ถœ๋กœ ๋…ธ๋“œ๊ฐ€ pop๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ตœ์ดˆ์— ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ๋„ฃ์–ด์ฃผ๋˜ ๊ฒฝ์šฐ์—๋Š”, ์ด์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ push ์ดํ›„ pop์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. ํ์˜ ๊ฐ€์žฅ ๋๋‹จ์— push ๋œ๋‹ค.
  2. ์•ž์˜ ๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ pop๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  3. ์ž์‹ ์˜ ์ฐจ๋ก€๊ฐ€ ์˜ค๋ฉด pop๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, pop๋  ๋•Œ ๋ฐฉ๋ฌธ๊ธฐ๋ก์„ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์€ (1) pop๋˜๊ธฐ๊นŒ์ง€ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค (2) ์ž์‹ ์ด push๋œ ํ›„, pop๋˜๊ธฐ ์ „๊นŒ์ง€ ๋“ค์–ด์˜จ ๋ชจ๋“  ๋…ธ๋“œ๋“ค ๊ณผ์˜ ์ค‘๋ณต์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด๊ณ ์š”.

์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ๋น„ํšจ์œจ์„ฑ์„ ๊ณ ์นœ ์ •๋‹ต ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ •๋‹ต์ฝ”๋“œ

# 5014

import sys
from collections import deque

Final, Start, Goal, Up, Down = map(int, input().split())

visited = [False]*(Final+1)
moves = [Up, Down*(-1)]

def bfs(start) :
	visited[start]=True
	cnt = 0
	queue = deque([(start,cnt)])
	while queue : # O(N)
		n, cnt = queue.popleft() # O(1)
		# visited[n] = True
		if(n == Goal) :
			return cnt
		for dn in moves : # O(2)
			next = n + dn
			if (next <= Final) and (next > 0) and (visited[next] == False) :
				queue.append((next,cnt+1)) # O(1)
				visited[next] = True
	return "use the stairs"
	
print(bfs(Start))

๊ฐ’์˜ ๋ณ€๋™์ด ์—†์„ ๊ฒƒ์ด๊ณ , ์—†์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— tuple์„ ์‚ฌ์šฉํ•ด deque ๋ฆฌ์ŠคํŠธ์— ์ญ‰ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠœํ”Œ๋กœ ๋ฌถ์ด๋Š” ๊ฒƒ์€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ(=ํ˜„์žฌ ์‚ดํŽด๋ณด๋Š” ์ธต์ˆ˜)์™€ ๋ช‡ ๋ฒˆ ์›€์ง์˜€๋Š”์ง€๋ฅผ ์„ธ๋Š” cnt ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ์ 

  1. n, cnt = queue.popleft()๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ์–ด๋””์—์„œ ํ•˜๋Š” ์ง€๋„ ์‹ ๊ฒฝ์จ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  3. ํŒŒ์ด์ฌ์€ ๋ฆฌํ„ด๊ฐ’์˜ ๋ฐ์ดํ„ฐํƒ€์ž…์ด ๋‹ฌ๋ผ๋„ ์ƒ๊ด€์—†๋‹ค! (n==Goal์ธ ๊ฒฝ์šฐ์—๋Š” Integer์ธ cnt๋ฅผ, while์„ ๋ชจ๋‘ ๋Œ์•˜์œผ๋‚˜ Goal์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์—๋Š” str์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.)

๊ฐœ์ธ์ ์œผ๋กœ ์˜ˆ์˜๊ฒŒ ์งœ์ง„ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๊ธฐ์—์„œ ์กฐ๊ธˆ ๋” ์ด์˜๊ฒŒ ํ•˜๋ ค๋ฉด, isValidMove ๋ผ๋Š” ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ (next <= Final) and (next>0)์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ฒ ์œผ๋‚˜, ์ฒ˜์Œ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„์ด๋ผ๋„ ์—†์• ๋ณด๋ ค๊ณ  ํ’€์–ด ์ผ๋˜ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.. ใ…‹ใ…‹ใ…‹



problem_solvingpython Share Tweet +1