문제풀이/프로그래머스
공원 산책(프로그래머스) 문제풀이
soo-dal
2024. 2. 29. 09:29
문제
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근 방식
공원에 대한 정보와 로봇 강아지가 수행할 명령어가 주어지며, 해당 명령어를 통해 로봇 강아지를 움직여서 최종 위치를 구하는 단순 구현 문제이다. 만약 이동시 장애물이 존재하거나 공원의 범위를 넘어간다면 해당 명령어는 무시하고 다음 명령어를 수행 처리해야한다.
처리과정
1. 로봇 강아지의 초기 위치를 찾는다
2. 명령어들을 수행한다.
2.1. 로봇 강아지의 다음 위치를 구한다
2.2. 만약 옮길 수 없다면 다음 명령어를 수행한다
3. 최종 위치를 반환한다
시간 복잡도
코드
d=dict({"N":(0,-1),"S":(0,1),"W":(-1,0),"E":(1,0)})
# 로봇 강아지의 현재위치와 명령어를 입력받아서 다음 위치를 구한다
# 만약 장애물이나 범위를 벗어난다면 None을 반환한다
def move(park,cur_x,cur_y,op,n):
for i in range(1,n+1):
nx=cur_x+d[op][0]*i
ny=cur_y+d[op][1]*i
if nx>=w or nx<0 or ny>=h or ny<0 or park[ny][nx]=='X' :
return None
return [nx,ny]
def solution(park, routes):
global w,h
h,w=len(park),len(park[0])
# 초기 로봇 강아지 위치를 구한다
for i in range(h):
for j in range(w):
if park[i][j]=='S':
cur_x,cur_y=j,i
# 명령어를 수행하며 로봇강아지를 이동시킨다
for route in routes:
op,n=route.split()
next=move(park,cur_x,cur_y,op,int(n))
if next==None: # 만약 None이라면 다음 명령어를 수행한다
continue
cur_x,cur_y=next
return [cur_y,cur_x]