๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Programmers] ๊ณต์› ์‚ฐ์ฑ… ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/Programmers

[Programmers] ๊ณต์› ์‚ฐ์ฑ…

์ง•์ง•์•ŒํŒŒ์นด 2023. 4. 14. 19:53
728x90
๋ฐ˜์‘ํ˜•
๊ณต์› ์‚ฐ์ฑ…
์ง€๋‚˜๋‹ค๋‹ˆ๋Š” ๊ธธ์„ 'O', ์žฅ์• ๋ฌผ์„ 'X'๋กœ ๋‚˜ํƒ€๋‚ธ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ๋ชจ์–‘์˜ ๊ณต์›์—์„œ ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์‚ฐ์ฑ…
์‚ฐ์ฑ…์€ ๋กœ๋ด‡ ๊ฐ•์•„์ง€์— ๋ฏธ๋ฆฌ ์ž…๋ ฅ๋œ ๋ช…๋ น์— ๋”ฐ๋ผ ์ง„ํ–‰
  ["๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ" … ]
  "E 5"๋Š” ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋™์ชฝ์œผ๋กœ 5์นธ ์ด๋™
  ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๊ณต์›์„ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธ
  ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ์ค‘ ์žฅ์• ๋ฌผ์„ ๋งŒ๋‚˜๋Š”์ง€ ํ™•์ธ
์œ„ ๋‘ ๊ฐ€์ง€์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹น๋œ๋‹ค๋ฉด, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰
๊ณต์›์˜ ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ W, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ H๋ผ๊ณ  ํ•  ๋•Œ, ๊ณต์›์˜ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์ขŒํ‘œ๋Š” (0, 0), ์šฐ์ธก ํ•˜๋‹จ์˜ ์ขŒํ‘œ๋Š” (H - 1, W - 1)

๊ณต์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด park, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด routes๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, 
๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ๋ชจ๋“  ๋ช…๋ น ์ˆ˜ํ–‰ ํ›„ ๋†“์ธ ์œ„์น˜๋ฅผ [์„ธ๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ, ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ] ์ˆœ์œผ๋กœ ๋ฐฐ์—ด ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜
def solution(park, routes):
    # park : S ์‹œ์ž‘ ์ง€์ , O ์ด๋™ ๊ฐ€๋Šฅํ•œ ํ†ต๋กœ, X ์žฅ์• ๋ฌผ
    # routes์˜ ๊ฐ ์›์†Œ๋Š” ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด
    #       p : N ๋ถ์ชฝ, S ๋‚จ์ชฝ, W ์„œ์ชฝ, E ๋™์ชฝ
    answer = []
    queue = deque()
    map = []
    x = 0
    y = 0
    k = 0
    for i in range(len(park)) :
        temp = []
        for j in park[i] :
            temp.append(j)            
            if j == "S" :
                x = i
                y = k
            k += 1
        map.append(temp)

    for i in routes :
        a, b = i.split(" ")
        b = int(b)
        queue.append((a, b))
	# map : [['S', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
	# queue : deque([('E', 2), ('S', 2), ('W', 1)])
    # x, y : 0, 0
    
    # n ๋ถ, s ๋‚จ, w ์„œ, e ๋™
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    while queue :
        p, q = queue.popleft()
        m = len(map)
        n = len(i)
        if p == "N" :
            for z in range(1, q+1) :
                nx = x + dx[0] * z
                ny = y + dy[0] * z
                if 0 > nx or nx >= m or 0 > ny or ny >= n :
                    nx = x
                    ny = y
                    break
                if map[nx][ny] == "X" :
                    nx = x
                    ny = y
                    break
        elif p == "S" :
            for z in range(1, q+1) :
                nx = x + dx[1] * z
                ny = y + dy[1] * z
                if 0 > nx or nx >= m or 0 > ny or ny >= n :
                    nx = x
                    ny = y
                    break
                if map[nx][ny] == "X" :
                    nx = x
                    ny = y
                    break
        elif p == "W" :
            for z in range(1, q+1) :
                nx = x + dx[2] * z
                ny = y + dy[2] * z
                if 0 > nx or nx >= m or 0 > ny or ny >= n :
                    nx = x
                    ny = y
                    print(nx, ny)
                    break
                if map[nx][ny] == "X" :
                    nx = x
                    ny = y
                    print(nx, ny)
                    break
        elif p == "E" :
            for z in range(1, q+1) :
                nx = x + dx[3] * z
                ny = y + dy[3] * z
                if 0 > nx or nx >= m or 0 > ny or ny >= n :
                    nx = x
                    ny = y
                    break
                if map[nx][ny] == "X" :
                    nx = x
                    ny = y
                    break
        x, y = nx, ny
        answer = [x, y]
    return answer

 

์•ž์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋งž๊ณ 

๋’ค์—๋Š” 10์ ... ์ด์œ ๊ฐ€ ๋ชฐ๊นŒ ์™•๊ถ๊ธˆใ…Žใ…๋‹ค

728x90
๋ฐ˜์‘ํ˜•
Comments