[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ณต์› ์‚ฐ์ฑ… (Python)

    ๋ฐ˜์‘ํ˜•

    ๐ŸŒฑ ๋ฌธ์ œ

     

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

    ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

    programmers.co.kr

     

    ๐ŸŒฑ ํ’€์ด

    ์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ, ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์„ค๋ช…์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

    • ์šฐ์„ , S์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
    • ์ด๋™ํ•˜๋Š” ๋ช…๋ น๋“ค(routes)์„ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  ๋•Œ์—๋Š” ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”์ง€, ์žฅ์• ๋ฌผ์ด ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์—, ํ•œ์นธ์”ฉ ์ด๋™ํ•˜๋Š” ์ขŒํ‘œ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜(nx, ny)๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์ค‘๊ฐ„์— break๋˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๋ช…๋ น์„ ๋๊นŒ์ง€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ์ด ํ™•์ธ๋˜์—ˆ์œผ๋ฉด S์˜ ์œ„์น˜(cx, cy)๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ S์˜ ์œ„์น˜(cx, cy)๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

     

    ๐ŸŒฑ ์ฝ”๋“œ

    # !usr/bin/env python
    # -*- coding: utf-8 -*-
    # programmers ๊ณต์› ์‚ฐ์ฑ…
    
    def solution(park, routes):
        answer = []
        h = len(park)
        w = len(park[0])
    
        # E, W, S, N
        dict = {"E": 0, "W": 1, "S": 2, "N": 3}
        x = [0, 0, 1, -1]
        y = [1, -1, 0, 0]
    
        # S์˜ ์œ„์น˜ ์ €์žฅ
        for i, row in enumerate(park):
            if "S" in row:
                cx, cy = i, row.index("S")
    
        # ์ด๋™ํ•˜๊ธฐ
        for route in routes:
            direction, count = route.split(" ")
            dx = x[dict[direction]]
            dy = y[dict[direction]]
            for cnt in range(1, int(count) + 1):
                nx, ny = cx + dx * cnt, cy + dy * cnt
                if (nx < 0 or ny < 0 or nx >= h or ny >= w):    # ๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ๊ฒ€์‚ฌ
                    break
                elif park[nx][ny] == "X":   # ์žฅ์• ๋ฌผ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
                    break
                if cnt == int(count):
                    cx += dx * int(count)
                    cy += dy * int(count)
        return [cx, cy]
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€