[python] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต 1๊ถŒ :: ๋ณด๊ธ€๊ฒŒ์ž„ (p150) ๋ฌธ์ œ

์˜ˆ์ œ: ๋ณด๊ธ€ ๊ฒŒ์ž„ (๋ฌธ์ œ ID: BOGGLE, ๋‚œ์ด๋„: ํ•˜)

๋ฌธ์ œ

5*5 ํฌ๊ธฐ์˜ ์•ŒํŒŒ๋ฒณ ๊ฒฉ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ํ•˜๋Š” ๊ฒŒ์ž„.

๊ฒŒ์ž„์˜ ๋ชฉ์ ์€ ์ƒํ•˜์ขŒ์šฐ / ๋Œ€๊ฐ์„ ์œผ๋กœ ์ธ์ ‘ํ•œ ์นธ๋“ค์˜ ๊ธ€์ž๋“ค์„ ์ด์–ด์„œ ๋‹จ์–ด๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธ€์ž๋“ค์€ ๋Œ€๊ฐ์„ ์œผ๋กœ๋„ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•œ ๊ธ€์ž๊ฐ€ ๋‘ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์นธ์—์„œ ์‹œ์ž‘ํ•ด์„œ ํŠน์ • ๋‹จ์–ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€์–ด ๋ด…์‹œ๋‹ค.

์ž…๋ ฅ

1

1

PRETTY

์ถœ๋ ฅ

True

ํ’€์ด
  1. ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• ์ƒ๊ฐ

    ์™„์ „ ํƒ์ƒ‰

  2. ๋ฌธ์ œ ๋ถ„ํ• 

    ์ฒซ ๊ธ€์ž ์ฐพ๊ธฐ => ๋‹ค์Œ ๊ธ€์ž๋ฅผ ์ฃผ๋ณ€์—์„œ ์ฐพ๊ธฐ

  3. ๊ธฐ์ € ์‚ฌ๋ก€ ์„ ํƒ

    ๋” ์ด์ƒ์˜ ํƒ์ƒ‰ ์—†์ด ๊ฐ„๋‹จํžˆ ๋‹ต์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

    1. ์ฒ˜์Œ ์ฃผ์–ด์ง„ ์œ„์น˜๊ฐ€ ์›ํ•˜๋Š” ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์‹คํŒจ
    2. 1์— ํ•ด๋‹นํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ 1๊ธ€์ž์ธ ๊ฒฝ์šฐ ์„ฑ๊ณต

    ๋‘˜์˜ ์ˆœ์„œ๋Š” ๋ฐ”๋€Œ๋ฉด ์•ˆ๋จ

    tip : ์ž…๋ ฅ์ด ์ž˜๋ชป๋˜๊ฑฐ๋‚˜ ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ, ๊ฒŒ์ž„ํŒ์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ, ์ฒซ ๊ธ€์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ๊ธฐ์ € ์‚ฌ๋ก€๋กœ ํƒํ•ด์„œ ์ฒ˜์Œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ

4.1. ๊ตฌํ˜„

   import sys

   # map, direction save
   game_map = [['U','R','L','P','M'],['X','P','R','E','T'],['G','I','A','E','T'],['X','T','N','Z','Y'],['X','O','Q','R','S']]
   side = [[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]]

   # get input
   try:
       pos_y = int(input())
       pos_x = int(input())
       target_word = input()
   except:
       sys.exit()


   def hasWord(y,x,word):
       if y<0 or y>4 or x<0 or x>4 : # in map?
           return False

       boolean = (word[0]==game_map[y][x])
       word = word[1:] # delete first alphabet

       if boolean:
           if not(len(word)): # word is empty
               return True
           else:
               for case in side: # dynamic programming
                   if hasWord(y+case[0],x+case[1],word):
                       return True
       else:
           return False

   print(hasWord(pos_y,pos_x,target_word))
๋ถ„์„

์ด์ „๊นŒ์ง€๋Š” ๊ธฐ์ €์‚ฌ๋ก€๋ผ๋Š” ๊ฐœ๋…์ด ์—†์–ด์„œ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์žฌ๊ท€๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋„ ์˜ˆ์™ธ ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉฐ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๊ธฐ์ €์‚ฌ๋ก€๋ฅผ ์ •์˜ํ•ด๋‘๊ณ  ์‹œ์ž‘ํ•˜๋‹ˆ ๋” ์˜ค๋ฅ˜๊ฐ€ ์ ๊ณ  ๋น ๋ฅธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋‘๋ฉด ํŽธํ•˜๋‹ค. python์€ ํŠนํžˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์„œ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค :>

ํ•ด๋‹น ์ฝ”๋“œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹œ๊ฐํ™”ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด O(8^(N)) (N: ๋‹จ์–ด์˜ ๊ธธ์ด)

    ex_ A๋กœ ๊ฐ€๋“์ฐฌ map์—์„œ AAAAAAH ์ฐพ๊ธฐ

    ์ง€์ˆ˜ ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„

๊ณ ์ฐฐ

์ฑ…์˜ ์˜ˆ์ œ์ฝ”๋“œ์—์„œ๋Š” if๋ฌธ์„ ์ฐจ๋ก€๋กœ ๋‘์–ด์„œ return๋ฌธ ๋•์— else๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ๋…ผ๋ฆฌ์ƒ ์ž๋™์ ์œผ๋กœ else์˜ ์˜๋ฏธ๊ฐ€ ๋˜๋„๋ก ํ–ˆ๋‹ค.

์ฆ‰, if(์กฐ๊ฑด): return ~ ๋ฌธ์žฅ ์ดํ›„์˜ ๋ฌธ์žฅ๋“ค์€ ๋ชจ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ๋“ค ๋ฟ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์ด ์‹œ๊ฐ„์ ์œผ๋กœ ์ด๋“์ด ๋˜๋Š”์ง€๋Š” ์˜๋ฌธ์ด๋‹ค.

๋ฐ˜์‘ํ˜•