연습장
25. 공원 산책 본문
park : 공원 모양
S : 시작점
O : 이동가능
X : 장애물
routes : ["방향 칸수", ... ]
3번의 예시
O | S | O |
O | O | O |
O | X | O |
O | O | O |
시작점 (0,1)
E 2 -> 공원 이탈 -> 불가능
S 3 -> 장애물 -> 불가능
W 1 -> 가능 (0,1) -> (0,0)
1. S 의 좌표를 확인
2. X(장애물)의 좌표를 확인
3. 이동 가능여부 판단
4. 이동 및 결과
def solution(park, routes):
answer = []
start = ''
xxx = []
for i in range(len(park)):
if 'S' in park[i]:
start = [i,park[i].index('S')]
if 'X' in park[i]:
for k,v in enumerate(park[i]):
if v == "X":
xxx.append([i,k])
print("start", start)
print('xxx', xxx )
return answer
잘 저장되는것을 확인
def solution(park, routes):
answer = []
start = '' # 시작점 (h,w)
xxx = [] # 장애물
w = len(park[0]) # 가로 이동
h = len(park) # 세로 이동
# 공원 확인
for i in range(len(park)):
if 'S' in park[i]:
start = [i,park[i].index('S')]
if 'X' in park[i]:
for k,v in enumerate(park[i]):
if v == "X":
xxx.append([i,k])
# 명령
for r in routes:
op = r[0] # 방향
n = int(r[-1]) # 이동 거리
# 공원 밖으로 나가는지?
if op == 'E':
if start[1] + n < w :
start[1] = start[1] + n
elif op == 'W' :
if start[1] - n >= 0 :
start[1] = start[1] - n
elif op == 'N':
if start[0] - n >= 0 :
start[0] = start[0] - n
elif op == 'S':
if start[0] + n < h :
start[0] = start[0] + n
# 장애물이 있는지?
return start
장애물 X 가 없는 경우에 대해서 통과하며 3의 경우도 장애물이 없다면 이동 했을 곳인 3,0 으로 잘 이동하는것으로 확인된다.
로직을 조금 변경했다.
방향에 따라서
- 공원 밖으로 나가는지
- 장애물에 걸리는지
둘중 하나의 조건을 만족할 경우 count 가 1 오르게 되고
count 가 0 인 경우에 대해서만 이동 할 수 있도록 하였다.
def solution(park, routes):
answer = []
start = '' # 시작점 (h,w)
xxx = [] # 장애물
w = len(park[0]) # 가로 이동
h = len(park) # 세로 이동
# 공원 확인
for i in range(len(park)):
if 'S' in park[i]:
start = [i,park[i].index('S')]
if 'X' in park[i]:
for k,v in enumerate(park[i]):
if v == "X":
xxx.append([i,k])
# 명령
for r in routes:
op = r[0] # 방향
n = int(r[-1]) # 이동 거리
count = 0
# 방향에 따라서 공원 밖으로 나가는지 or 장애물에 걸리는지
for k in range(1,n+1):
if (op == 'E') and ((start[1]+n >= w) or ([start[0], start[1]+k] in xxx)) :
count += 1
elif (op == 'W') and ((start[1]-n < 0) or ([start[0], start[1]-k] in xxx)) :
count += 1
elif (op == 'S') and ((start[0]+n >= h) or ([start[0]+k, start[1]] in xxx)) :
count += 1
elif (op == 'N') and ((start[0]-n < 0) or ([start[0]-k, start[1]] in xxx)) :
count += 1
# 해당되는게 없는 경우 이동
if count == 0:
if op == 'E':
start[1] = start[1] + n
elif op == 'W':
start[1] = start[1] - n
elif op == 'S':
start[0] = start[0] + n
elif op == 'N':
start[0] = start[0] - n
return start
'프로그래머스 > 1단계' 카테고리의 다른 글
27. 붕대 감기 (0) | 2024.01.22 |
---|---|
26. 신고 결과 받기 (1) | 2024.01.22 |
24. 달리기 경주 (0) | 2024.01.22 |
23. 개인정보 수집 유효기간 (1) | 2024.01.22 |
22. 바탕화면 정리 (0) | 2024.01.20 |