๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฏธ๋กœ ํƒˆ์ถœ

๐ŸŽฎinspirer9 2023. 2. 16. 23:14
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์—์„œ ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์นธ์€ ํ†ต๋กœ ๋˜๋Š” ๋ฒฝ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฒฝ์œผ๋กœ ๋œ ์นธ์€ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๊ณ  ํ†ต๋กœ๋กœ ๋œ ์นธ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ต๋กœ๋“ค ์ค‘ ํ•œ ์นธ์—๋Š” ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๋ฌธ์ด ์žˆ๋Š”๋ฐ, ์ด ๋ฌธ์€ ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ฒจ์„œ๋งŒ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๋ฒ„ ๋˜ํ•œ ํ†ต๋กœ๋“ค ์ค‘ ํ•œ ์นธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ถœ๋ฐœ ์ง€์ ์—์„œ ๋จผ์ € ๋ ˆ๋ฒ„๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ธด ํ›„ ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๋ฌธ์ด ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์•„์ง ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ธฐ์ง€ ์•Š์•˜๋”๋ผ๋„ ์ถœ๊ตฌ๊ฐ€ ์žˆ๋Š” ์นธ์„ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋กœ์—์„œ ํ•œ ์นธ์„ ์ด๋™ํ•˜๋Š”๋ฐ 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•  ๋•Œ, ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋ฌธ์ž์—ด ๋ฐฐ์—ด maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ์‹œ๊ฐ„์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋งŒ์•ฝ, ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ return ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 5 ≤ maps์˜ ๊ธธ์ด ≤ 100
    • 5 ≤ maps[i]์˜ ๊ธธ์ด ≤ 100
    • maps[i]๋Š” ๋‹ค์Œ 5๊ฐœ์˜ ๋ฌธ์ž๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
      • S : ์‹œ์ž‘ ์ง€์ 
      • E : ์ถœ๊ตฌ
      • L : ๋ ˆ๋ฒ„
      • O : ํ†ต๋กœ
      • X : ๋ฒฝ
    • ์‹œ์ž‘ ์ง€์ ๊ณผ ์ถœ๊ตฌ, ๋ ˆ๋ฒ„๋Š” ํ•ญ์ƒ ๋‹ค๋ฅธ ๊ณณ์— ์กด์žฌํ•˜๋ฉฐ ํ•œ ๊ฐœ์”ฉ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ๊ตฌ๋Š” ๋ ˆ๋ฒ„๊ฐ€ ๋‹น๊ฒจ์ง€์ง€ ์•Š์•„๋„ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ํ†ต๋กœ, ์ถœ๊ตฌ, ๋ ˆ๋ฒ„, ์‹œ์ž‘์ ์€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

maps result
["SOOOL","XXXXO","OOOOO","OXXXX","OOOOE"] 16
["LOOXS","OOOOX","OOOOO","OOOOO","EOOOO"] -1

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฏธ๋กœ์ด๋ฉฐ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋™ํ•˜๋ฉด ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์— ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4๋ฒˆ ์ด๋™ํ•˜์—ฌ ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ธฐ๊ณ  ์ถœ๊ตฌ๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด ์ด 16์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 16์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฏธ๋กœ์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ ์ง€์ ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ์—†์–ด์„œ ํƒˆ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ๋ฌด์ง€์„ฑ ํ’€์ด

  • ์ด์ „์— ๊ธธ ์ฐพ๊ธฐ ํ•œ ๊ฑฐ๋ฅผ 2๋ฒˆ ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹ˆ๋ƒ? ํ•˜๋ฉด์„œ ์ญ์ญ ์งฐ๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ†ต๊ณผ.
  • ๊ทผ๋ฐ ์งœ๋ฉด์„œ๋„ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ์•ˆ๋  ์ค„ ์•Œ์•˜๋‹ค.
from collections import deque
    
def solution(maps): # ๊ฒฝ์œ ์ง€๊ฐ€ ์žˆ๋Š” ๊ธธ์ฐพ๊ธฐ ๋ฌธ์ œ
    answer = 0
    
    goals = {'S':[0,0],'L':[0,0],'E':[0,0]}
    
    map_size_x = len(maps[0])
    map_size_y = len(maps)
    
    map_data = []
    
    for i in range(map_size_y):
        _tmp = list(maps[i])
        for j in range(map_size_x):
            if _tmp[j] == 'X':
                _tmp[j] = 0
            else:
                _tmp[j] = 1
        map_data.append(_tmp)
        if 'S' in maps[i]:
            goals['S'] = [maps[i].index('S'), i]
        if 'L' in maps[i]:
            goals['L'] = [maps[i].index('L'), i]
        if 'E' in maps[i]:
            goals['E'] = [maps[i].index('E'), i]
        
    def find_way(begin_x, begin_y, goal_x, goal_y):
        x_move = [1, 0, -1, 0]
        y_move = [0, 1, 0, -1]
        
        queue = deque([(begin_x, begin_y, 1)])

        while queue:
            x, y, d = queue.popleft()

            for i in range(4):
                nx = x + x_move[i]
                ny = y + y_move[i]

                if nx > -1 and ny > -1 and nx < map_size_x and ny < map_size_y:
                    if map_data[ny][nx] != 0 or map_data[ny][nx] > d + 1:
                        map_data[ny][nx] = d + 1
                        if nx == goal_x and ny == goal_y:
                            return d + 1

                        queue.append((nx, ny, d + 1))
        return -1

    def draw():
        for i in map_data:
            print(i)
        print
    #draw()
    
    a = find_way(goals['S'][0], goals['S'][1], goals['L'][0], goals['L'][1])
    b = find_way(goals['L'][0], goals['L'][1], goals['E'][0], goals['E'][1])
    
    if min(a, b) == -1:
        return -1
    
    return a + b - 2
  • ๋‹ต์€ ๋งž์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ์ž…๋‹ˆ๋‹ค. ํœด๋จผ.
  • ์™ ์ง€ S๋ž‘ E๊ฐ€ ๋ถ™์–ด์žˆ๊ณ , L์€ ๋์— ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋‘๋ฒˆ์˜ ๊ธธ์ฐพ๊ธฐ๋กœ ์†๋„๊ฐ€ ์•ˆ๋‚˜์˜จ๋‹ค๋ฉด ํ•œ๋ฒˆ์˜ ๊ธธ์ฐพ๊ธฐ๋กœ ๋‘๊ฐœ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
  • ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ทธ๊ฑฐ ๋งž์ง€???
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (2.63ms, 10.4MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (27.77ms, 12.3MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 5 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (51.02ms, 13.9MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 8 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.27ms, 10.3MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 11 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 12 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 13 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 14 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 15 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 16 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 17 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 18 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 19 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 20 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 21 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 22 ใ€‰	์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
ํ…Œ์ŠคํŠธ 23 ใ€‰	ํ†ต๊ณผ (0.09ms, 10.3MB)
  • ๊ทธ๋ž˜์„œ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ํ‹€๋ฆผ. ๋””ํ ๊ทธ๋Œ€๋กœ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ํ‹€๋ฆผ.
    • draw_map( ) ํ•จ์ˆ˜ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‹ˆ๊นŒ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋จ.
    • ์•„๋ฌด๋ž˜๋„ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์“ฐ๋Š”๊ฒŒ ๋งž์ง€ ์‹ถ์Œ.
  • heapq๋กœ ๋ฐ”๊พธ๊ณ  ์†Œ์Šค ์ˆ˜์ •ํ•˜๊ณ  ๋˜ ์ˆ˜์ •ํ•˜๊ณ  ํ•ด๋„ ํ•˜๋‚˜๊ฐ€ ์•ˆํ’€๋ ค์„œ ํ˜น์‹œ๋‚˜ ํ•ด์„œ limit๋ฅผ ๋Š˜๋ ธ๋”๋‹ˆ ํ•ด๊ฒฐ๋จ.
    • ๋‚ด๊ฐ€ ํ‘ผ ๋ฐฉ์‹์€ ๊ธฐ์กด ๊ธธ์ฐพ๊ธฐ์™€ ๋™์ผํ•œ๋ฐ,
    • ๋ ˆ๋ฒ„ ์œ„์น˜์—์„œ ๋ฒ”์œ„๋ฅผ ๋„“ํžˆ๋ฉด์„œ ์‹œ์ž‘์œ„์น˜์™€ ๋„์ฐฉ์œ„์น˜๋ฅผ ์ฐพ๊ณ ,
    • ๋‘˜ ๋‹ค ์ฐพ์€ ๊ฒฝ์šฐ ๋ ˆ๋ฒ„์œ„์น˜์—์„œ ๊ฐ๊ฐ์˜ ์œ„์น˜(์‹œ์ž‘, ๋„์ฐฉ)๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํ•ฉํ•ด์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค.
import heapq
    
def solution(maps): # ๊ฒฝ์œ ์ง€๊ฐ€ ์žˆ๋Š” ๊ธธ์ฐพ๊ธฐ ๋ฌธ์ œ
    pq = []
    dist = 0
    map_size_y, map_size_x = len(maps), len(maps[0])
    map_data, sp, lp, ep = [], [], [], []
    limit = map_size_y * map_size_x
    is_find = [False, False]
    
    for i in range(map_size_y):
        _t = list(maps[i])
        for j in range(map_size_x):
            a = _t[j]
            if   a == 'E': ep = [j,i]
            elif a == 'L': lp = [j,i]
            elif a == 'S': sp = [j,i]
            if   a == 'X': _t[j] = -1
            else: _t[j] = limit
        map_data.append(_t)
        
    distance_to_start = limit
    distance_to_ep = limit

    heapq.heappush(pq, [dist, (lp[0], lp[1])])
    
    while len(pq) > 0:
        _pq = heapq.heappop(pq)
        dist, x, y = _pq[0], _pq[1][0], _pq[1][1]
        
        if x == sp[0] and y == sp[1]:
            distance_to_start = min(distance_to_start, dist)
            is_find[0] = True
        if x == ep[0] and y == ep[1]:
            distance_to_ep = min(distance_to_ep, dist)
            is_find[1] = True
        if is_find == [True, True]:
            return distance_to_start + distance_to_ep

        if map_data[y][x] > dist:
            map_data[y][x] = dist
            dist += 1
            for dx, dy in ((1, 0), (-1, 0), (0, 1), (0, -1)):
                nx, ny = x + dx, y + dy
                if 0 <= nx and nx < map_size_x and 0 <= ny and ny < map_size_y:
                    heapq.heappush(pq, [dist, (nx, ny)])
        
    return -1
  • ์†๋„๋„ ๋งจ ์ฒ˜์Œ ๊ฒƒ๋ณด๋‹ค ๋น ๋ฆ„.
  • ๊ทผ๋ฐ ์ด๊ฒŒ 12๋ฒˆ์งธ ์ˆ˜์ •ํ•œ ์†Œ์Šค์ž„ ใ…‹ใ…‹ใ…‹
  • ๋น„๋‡Œ์ง€์ปฌ ๋ฌด์ง€์„ฑ ์ฝ”๋”ฉ์ด ํž˜๋“  ์ด์œ ... ์†์ด ๋ป๊ทผํ•จ.
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.07ms, 10.3MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.24ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.22ms, 10.1MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.21ms, 10.3MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.33ms, 10.2MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.21ms, 10.4MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (3.10ms, 10.2MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (5.27ms, 10.1MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.06ms, 10.1MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (1.57ms, 10.3MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (11.25ms, 10.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (10.17ms, 10.3MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (11.37ms, 10.3MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.85ms, 10.5MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (29.50ms, 10.3MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (34.61ms, 10.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (0.83ms, 10MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (0.26ms, 10.2MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (17.84ms, 10.3MB)
ํ…Œ์ŠคํŠธ 21 ใ€‰	ํ†ต๊ณผ (3.22ms, 10.2MB)
ํ…Œ์ŠคํŠธ 22 ใ€‰	ํ†ต๊ณผ (0.22ms, 10.4MB)
ํ…Œ์ŠคํŠธ 23 ใ€‰	ํ†ต๊ณผ (0.09ms, 10.4MB)
  • ์ด๊ฑฐ ์ข€ ์–ด๋ ค์› ๋Š”๋ฐ... ์•”ํŠผ ํ•ด๊ฒฐ.
  • 3์‹œ๊ฐ„ ๋™์•ˆ ๊ณ ์ƒํ–ˆ๋‹ค๊ณ  +3์  ์ฃผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ณ ์ˆ˜์˜ ํ’€์ด

  • ๊ทผ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ํ’€์ด ๋ณด๋‹ˆ๊นŒ, ๋””ํ๋กœ ๋‘๋ฒˆ ์ฐพ์•„์„œ ํ•ด๊ฒฐํ–ˆ๋Š”๋ฐ...?
  • ์ด๊ฒŒ ๋˜๋Š”๊ฑด๋ฐ ๋‚ด๊ฐ€ ๋ฐ”๋ณธ๊ฐ€?
from collections import deque

def solution(maps):
    pos=[-1,-1,0]
    flag=False
    dir=[(-1,0),(0,1),(1,0),(0,-1)]

    # find start
    for i in range(len(maps)):
        for j in range(len(maps[0])):
            if maps[i][j]=='S':
                pos=[i,j,0]
    #find lever
    queue=deque([pos])
    visited=[[0 for _ in range(len(maps[0]))] for _ in range(len(maps))]
    visited[pos[0]][pos[1]]=1

    while queue:
        temp=queue.popleft()
        if maps[temp[0]][temp[1]]=="L":
            pos=temp
            flag=True
            break
        for d in dir:
            dx=temp[0]+d[0]
            dy=temp[1]+d[1]
            if dx>=0 and dx<len(maps) and dy>=0 and dy<len(maps[0]):
                if maps[dx][dy]!='X' and visited[dx][dy]==0:
                    queue.append([dx,dy,temp[2]+1])
                    visited[dx][dy]=1
    if flag==False:
        return -1

    #find exit
    queue=deque([pos])
    visited=[[0 for _ in range(len(maps[0]))] for _ in range(len(maps))]
    visited[pos[0]][pos[1]]=1

    while queue:
        temp=queue.popleft()
        if maps[temp[0]][temp[1]]=="E":
            return temp[2]
            break
        for d in dir:
            dx=temp[0]+d[0]
            dy=temp[1]+d[1]
            if dx>=0 and dx<len(maps) and dy>=0 and dy<len(maps[0]):
                if maps[dx][dy]!='X' and visited[dx][dy]==0:
                    queue.append([dx,dy,temp[2]+1])
                    visited[dx][dy]=1
    return -1
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.05ms, 10.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.13ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.19ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.28ms, 10.4MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.21ms, 10.2MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.12ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (2.44ms, 10.3MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (3.93ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.06ms, 10.4MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.84ms, 10.1MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (5.64ms, 10.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (6.68ms, 10.2MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (5.06ms, 10.2MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.64ms, 10.3MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (11.76ms, 10.4MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (18.72ms, 10.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (0.44ms, 10.4MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (0.25ms, 10.2MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (11.07ms, 10.5MB)
ํ…Œ์ŠคํŠธ 21 ใ€‰	ํ†ต๊ณผ (2.85ms, 10.2MB)
ํ…Œ์ŠคํŠธ 22 ใ€‰	ํ†ต๊ณผ (0.27ms, 10.2MB)
ํ…Œ์ŠคํŠธ 23 ใ€‰	ํ†ต๊ณผ (0.05ms, 10.2MB)
  • ์ด๊ฒƒ๋„ ๋น ๋ฅด๋‹ค. ๊ทธ๋ƒฅ ๋‘๋ฒˆ ์ฐพ์•„๋„ ๋˜๋Š”๊ตฌ๋‚˜...
  • ๋‹ค์Œ์— ์งค ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ์งœ์•ผ์ง€.
  • ๋ถ„๋ช…ํžˆ ๋‚˜๋„ ์ฒ˜์Œ์—” ์ด๋ ‡๊ฒŒ ์งค๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ๋จธ๋ฆฌ๊ฐ€ ์•ˆ๋˜์„œ... ใ…ก.ใ…ก; 
def solution(maps):
    answer = 0
    x, y, d = None, None, 0
    n = len(maps)
    m = len(maps[0])
    chk = [[False for _ in range(m)] for _ in range(n)]
    dd = [[0, 1], [1, 0], [-1, 0], [0, -1]]

    for i, x in enumerate(maps):
        for j, y in enumerate(x):
            if y == 'S':
                sx = i
                sy = j
                chk[i][j] = True


    def get_d(sx, sy, target, flag):
        q = [[sx, sy, 0]]
        chk = [[False for _ in range(m)] for _ in range(n)]
        chk[sx][sy] = True
        while q:
            x, y, d = q.pop(0)
            if maps[x][y] == target:
                return [x, y, d]

            for dx, dy in dd:
                nx = x + dx
                ny = y + dy

                if not (0 <= nx < n and 0 <= ny < m) or chk[nx][ny] or maps[nx][ny] == 'X':
                    continue

                q.append([nx, ny, d + 1])
                chk[nx][ny] = True
        return [-1, -1, -1]
    x1, y1, d1 = get_d(sx, sy, 'L', False) 
    if x1 == -1:
        return -1
    x2, y2, d2 = get_d(x1, y1, 'E', True)
    if x2 == -1:
        return -1
    return d1 + d2
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.09ms, 10.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.17ms, 10.1MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.13ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.20ms, 10.1MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.26ms, 10.1MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.16ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (2.04ms, 10.2MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (3.14ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.04ms, 10MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.81ms, 10.2MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (5.40ms, 10.3MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (4.85ms, 10.3MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (4.68ms, 10.1MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.76ms, 10.2MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (13.90ms, 10.3MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (11.47ms, 10.3MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (0.32ms, 10.1MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (0.25ms, 10.2MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (9.89ms, 10.3MB)
ํ…Œ์ŠคํŠธ 21 ใ€‰	ํ†ต๊ณผ (2.57ms, 10.1MB)
ํ…Œ์ŠคํŠธ 22 ใ€‰	ํ†ต๊ณผ (0.31ms, 10.2MB)
ํ…Œ์ŠคํŠธ 23 ใ€‰	ํ†ต๊ณผ (0.06ms, 10.2MB)

๋งŒ์•ฝ ์ด๋Ÿฐ ๋ฌธ์ œ ๋‹ค์‹œ ํ’€๊ธฐ ํ•œ๋‹ค๋ฉด,

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

https://ko.m.wikipedia.org/wiki/ํ”Œ๋Ÿฌ๋“œ_ํ•„

 

ํ”Œ๋Ÿฌ๋“œ ํ•„ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

  ์Šคํƒ์„ ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” 4๋ฐฉํ–ฅ ํ”Œ๋Ÿฌ๋“œ ํ•„

ko.m.wikipedia.org

์ฆ๊ฑฐ์šด ๋ฌด์ง€์„ฑ ์ฝ”๋”ฉ ์ƒํ™œ~!

728x90
๋ฐ˜์‘ํ˜•