알고리즘

[프로그래머스, 파이썬] 공원 산책

hminor 2024. 2. 19. 12:05
반응형

풀이

  • 코드가 길어질 수 밖에 없는 문제...
  • 물론 짧게 만든다면야 만들겠지만
  • 크게 효율과 가독성이 좋지 않아 아래와 같이 풀이
  • routes로 받아온 값에 따라 op 방향으로 n 만큼 한칸씩 이동해보며
  • 장애물인지 확인하고, 장애물일 경우 반복문 탈출
  • 이전에 op 방향 조건 분기와 동시에 최종으로 이동할 곳이
  • 배열 범위에서 벗어나지 않는지 확인하면 해결

 

def solution(park, routes):
    for i in range(len(park)):
        for j in range(len(park[i])):
            if park[i][j] == "S":
                y,x = i,j
                for k in routes:
                    op,n = k.split()
                    n = int(n)
                    state = True
                    if op == "E" and x+n < len(park[i]):
                        for l in range(1,n+1):
                            if park[y][x+l] == "X":
                                state = False
                                break
                        if state: x += n  
                    elif op == "W" and x-n >= 0:
                        for l in range(1,n+1):
                            if park[y][x-l] == "X":
                                state = False
                                break
                        if state: x -= n
                    elif op == "S" and y+n < len(park):
                        for l in range(1,n+1):
                            if park[y+l][x] == "X":
                                state = False
                                break
                        if state: y += n
                    elif op == "N" and y-n >= 0:
                        for l in range(1,n+1):
                            if park[y-l][x] == "X":
                                state = False
                                break
                        if state: y -= n
                return [y,x]