코딩일지/파이썬

프로그래머스 연습문제 - 공원 산책

야언 2023. 3. 25. 13:53

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

 

프로그래머스

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

programmers.co.kr

 

풀이방향 :

 

시작점 S 찾기

 

방향에 따라 움직이는 함수 작성

 

routes의 방향에 따른 움직임, 횟수만큼 반복시행

 

공원을 벗어나거나 장애물을 만나면 다음 명령 시행

 

 

 

 

제출

def solution(park, routes):
    r,c	= 0,0 # S 위치
    R,C = len(park),len(park[0]) # 공원 경계
    move = {"E":(0,1),"W":(0,-1),"S":(1,0),"N":(-1,0)} 
    
    for i,row in enumerate(park): # 시작점 찾기
        if "S" in row:
            r,c = i,row.find("S")
            break

    for route in routes:
        dr,dc = move[route[0]] # 입력받는 route의 움직임 방향
        new_r,new_c = r,c # new_r,new_c : route 적용 후 위치
        for _ in range(int(route[2])): # 입력받은 route의 횟수만큼
            # 한칸씩 움직이면서, 공원 안쪽이고 "X"가 아니라면 한칸이동
            if 0<=new_r+dr<R and 0<=new_c+dc<C and park[new_r+dr][new_c+dc] != "X":
                new_r,new_c = new_r+dr,new_c+dc
            else: # 막혔다면 그대로 다음 명령 수행
                new_r,new_c = r,c
                break
        r,c = new_r,new_c # 위치 업데이트

    return [r,c]