본문 바로가기
Algorithm/programmers

[파이썬] programmers: 공원 산책

by 갈잃자 2024. 1. 25.

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


단순 구현문제. 함정은 'O'만 움직일 수 있는게 아니라 'S'도 이동할 수 있다는것

def solution(park, routes):
    answer = []
    h = len(park);
    w = len(park[0]);
    # park 2중배열로 변환
    parkArr = [];
    for i in range(len(park)):
        parkArr.append(list(park[i]))

    # routes 2중배열로 변환
    routesArr = []
    for i in range(len(routes)):
        routesArr.append(routes[i].split(' '))

    start = []
    for y in range(len(parkArr)):
        for x in range(len(parkArr[y])):
            if parkArr[y][x] == 'S':
                start = [y, x]

    def goTo(direction, length, start):
        # routesArr을 돌며 방향 확인
        starty = start[0]
        startx = int(start[1])
        if direction == 'E':
            if 0 > startx + length or startx + length >= w: return start  # 벗어나면 원래 위치 리턴
            for i in range(1, 1 + length):
                if parkArr[starty][startx + i] != 'X':
                    continue
                else:
                    return start
            return [starty, startx + length]

        elif direction == 'S':
            if 0 > starty + length or starty + length >= h: return start
            for i in range(1, 1 + length):
                if parkArr[starty + i][startx] != 'X':
                    continue
                else:
                    return start
            return [starty + length, startx]

        elif direction == 'W':
            if 0 > startx - length or startx - length >= w: return start
            for i in range(1, 1 + length):
                if parkArr[starty][startx - i] != 'X':
                    continue
                else:
                    return start
            return [starty, startx - length]
        else:
            if 0 > starty - length or starty - length >= h: return start
            for i in range(1, 1 + length):
                if parkArr[starty - i][startx] != 'X':
                    continue
                else:
                    return start
            return [starty - length, startx]

    for i in range(len(routesArr)):
        start = goTo(routesArr[i][0], int(routesArr[i][1]), start)
    answer = start
    return answer

 

댓글