일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬
- counter
- itertools
- CodingTest
- Queue
- 코딩테스트
- Stack
- mysql
- 프로그래머스
- time complexity
- join
- 연습문제
- lambda
- coding
- level4
- lv4
- Level2
- sql
- 시간복잡도
- programmers
- collections
- 데이터분석
- coding test
- BFS
- 조합
- 코테
- 코딩
- import re
- 완전탐색
- python
- Today
- Total
ror_coding
[Programmers] 공원 산책 - 172928 본문
728x90
list out of range 가 너무 많이 떠서 index 활용 부분 고민이 컸다.
쉬워보이지만 은근 고려해야 할게 많아서 오래 걸린 문제..
Question
공원을 나타내는 문자열 배열 park, 로봇 강아지가 수행할 명령이 담긴 문자열 배열 routes가 매개변수로 주어질 때, 로봇 강아지가 모든 명령을 수행 후 놓인 위치를 [세로 방향 좌표, 가로 방향 좌표] 순으로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
Point
- way를 dictionary로 만들 때 value에 tuple을 넣어서 상하좌우를 표시.
- 공원(칸)을 넘어가거나 가는 길에 'X'가 있으면 되돌아 옴.
- 가는 길 index를 [ pre_loc : loc + 1] 으로 하지 않고 ( [2:0] 등으로 입력되면 동작하지 않기 때문 ) min 값을 시작, max 값을 끝에 둠. (like [ min_loc : max_loc + 1 ])
- op == 'W' or 'E' 일땐 park[ 고정 ] [ ~이동~ ] 형식이 되지만, op == 'S' or 'N'처럼 위아래 이동일 땐 list 인 park [ ~이동~] [고정] 으로 값을 볼 수 없기 때문에 for문을 이용해서 한 줄씩 봄.
Code
def solution(park, routes):
loc = [-1,-1]
lh, lw = len(park), len(park[0])
way = {'E':(0,1), 'N':(-1,0), 'W':(0,-1), 'S':(1,0)}
for idx,p in enumerate(park): # 시작 지점 찾음.
if p.find('S') != -1 : loc = [idx, p.find('S')]
pre_loc = loc.copy()
for route in routes:
op, n = route.split(' ')
n = int(n)
loc[0] += way[op][0]*n
loc[1] += way[op][1]*n
if not(0<=loc[0]<lh and 0<=loc[1]<lw) : loc = pre_loc.copy(); continue # 공원 벗어나면 이전 loc.
if (op=='W' or op=='E'):
min_loc,max_loc = min(pre_loc[1],loc[1]), max(pre_loc[1],loc[1])
if 'X' in park[loc[0]][min_loc:max_loc+1]: # 좌우 가는 길 'X' 여부 확인.
loc = pre_loc.copy()
else :
is_X = False
min_loc,max_loc = min(pre_loc[0],loc[0]), max(pre_loc[0],loc[0])
for p in park[min_loc:max_loc+1]: # 상하 가는 길 'X' 여부 확인.
if p[loc[1]] == 'X': is_X = True; break
if is_X : loc = pre_loc.copy(); continue # 가는 길 'X'가 없는 경우에만 이동.
pre_loc = loc.copy()
return loc
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/045.gif)
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 구명보트 - 42885 (1) | 2024.10.24 |
---|---|
[Programmers] 햄버거 만들기 - 133502 (0) | 2024.10.23 |
[Programmers] 숫자 짝꿍 - 131128 (0) | 2024.10.22 |
[Programmers] 체육복 - 42862 (1) | 2024.10.17 |
[Programmers] 둘만의 암호 - 155652 (0) | 2024.10.14 |