본문 바로가기
프로그래머스/1단계

(Python/LV1)공원 산책

by windy7271 2023. 4. 1.
728x90
반응형

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

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

programmers.co.kr

풀이:

def solution(park, routes):
    answer = []
    start = []

    for i in range(len(park)):
        if 'S' in park[i]:
            start = [i, park[i].find('S')]
            break
    print(start)
    for route in routes:
        dir, move = route.split(' ')
        move = int(move)

        if dir == 'E':
            loc = start[1] + move
            if loc >= len(park[0]):
                continue
            if 'X' in park[start[0]][start[1]+1:loc+1]:
                continue
            else:
                start[1] = loc

        elif dir == 'W':
            loc = start[1] - move
            if loc < 0:
                continue
            if 'X' in park[start[0]][loc:start[1]]:
                continue
            else:
                start[1] = loc

        elif dir == 'S':
            loc = start[0] + move
            if loc >= len(park):
                continue
            if 'X' in [park[i][start[1]] for i in range(start[0]+1,loc+1)]:
                continue
            else:
                start[0] = loc

        elif dir == 'N':
            loc = start[0] - move
            if loc < 0:
                continue
            if 'X' in [park[i][start[1]] for i in range(loc,start[0])]:
                continue
            else:
                start[0] = loc

    return start

 

 

25.03.08 재풀이

 

def solution(park, routes):
    graph = [list(i) for i in park]
    start = [0, 0]
    for x in range(len(graph)):
        for y in range(len(graph[0])):
            if graph[x][y] == "S":
                start = [x, y]

    move = {"W": (0, -1),
            "E": (0, 1),
            "N": (-1, 0),
            "S": (1, 0)}
    for route in routes:
        moving, step = route.split(" ")
        temp_x = start[0]
        temp_y = start[1]
        for _ in range(int(step)):
            dx, dy = move[moving]
            start[0] += dx
            start[1] += dy
            if 0 <= start[0] < len(graph) and 0 <= start[1] < len(graph[0]) and graph[start[0]][start[1]] != "X":
                continue
            else:
                start[0] = temp_x
                start[1] = temp_y
                break
    return start

 

 

bfs 로 접근하였다

 

routes를 돌면서 

하나의 명령어를 시작하기전에

temp_x 와 temp_y에 위치를 저장하고 실패하면 다시 돌린다. 성공하면 시작위치는 이동이 되어있다.

 

 

반응형

댓글