프로그래머스 Level 1 공원산책 파이썬 문제 풀이 입니다.
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/172928?language=python3
✅ Python3 답안 입니다 더보기 클릭!
def vaild_check(cur, after, park, d):
total_x = len(park[0])
total_y = len(park)
if after[0] < 0 or after[0] >= total_y or 0 > after[1] or after[1] >= total_x:
return False
elif d == 'E':
road = park[cur[0]]
if 'X' in road[cur[1]: after[1]+1]:
return False
elif d == 'W':
road = park[cur[0]]
if 'X' in road[after[1]: cur[1]+1]:
return False
elif d == 'S':
road = []
for p in park:
road.append(p[cur[1]])
if 'X' in road[cur[0]: after[0]+1]:
return False
elif d == 'N':
road = []
for p in park:
road.append(p[cur[1]])
if 'X' in road[after[0]: cur[0]+1]:
return False
return True
def solution(park, routes):
answer = []
cur = [0,0]
for i,p in enumerate(park):
for j,x in enumerate(p):
if x == 'S':
cur = [i,j]
for i,r in enumerate(routes):
if r[0] == 'E':
after = [cur[0], cur[1]+ int(r[2])]
if r[0] == 'W':
after = [cur[0], cur[1]- int(r[2])]
if r[0] == 'S':
after = [cur[0]+ int(r[2]), cur[1]]
if r[0] == 'N':
after = [cur[0]- int(r[2]), cur[1]]
vaild = vaild_check(cur, after, park, r[0])
if vaild:
cur = after
answer = cur
return answer
📌 해설
빡구현으로 풀었습니다. 다른 사람의 풀이를 확인해보니 자료구조를 적절히 활용해 보는것도 좋을 듯합니다.
def solution(park, routes):
answer = []
cur = [0,0]
for i,p in enumerate(park):
for j,x in enumerate(p):
if x == 'S':
cur = [i,j]
for i,r in enumerate(routes):
if r[0] == 'E':
after = [cur[0], cur[1]+ int(r[2])]
if r[0] == 'W':
after = [cur[0], cur[1]- int(r[2])]
if r[0] == 'S':
after = [cur[0]+ int(r[2]), cur[1]]
if r[0] == 'N':
after = [cur[0]- int(r[2]), cur[1]]
if vaild_check(cur, after, park, r[0]):
cur = after
answer = cur
return answer
1. 'S' 스타트 지점을 찾아 cur 에 담습니다.
2. routes 를 순회하면서 after 을 만들고 vaild_check 에 필요한 값들을 넘겨 매번 이동할때마다 체크를 합니다.
3. 체크해서 True 일때만 이동시킵니다. cur = after
3. 답을 반환합니다.
def vaild_check(cur, after, park, d):
total_x = len(park[0])
total_y = len(park)
if after[0] < 0 or after[0] >= total_y or 0 > after[1] or after[1] >= total_x:
return False
elif d == 'E':
road = park[cur[0]]
if 'X' in road[cur[1]: after[1]+1]:
return False
elif d == 'W':
road = park[cur[0]]
if 'X' in road[after[1]: cur[1]+1]:
return False
elif d == 'S':
road = []
for p in park:
road.append(p[cur[1]])
if 'X' in road[cur[0]: after[0]+1]:
return False
elif d == 'N':
road = []
for p in park:
road.append(p[cur[1]])
if 'X' in road[after[0]: cur[0]+1]:
return False
return True
체크 로직입니다. 매우 단순합니다.
1. after 이 먼저 공원 밖을 나가는지 검사합니다. 밖으로 나가면 False를 반환하고 체크 함수를 종료합니다.
2. 각 방향마다 이동할 길(road)이 'X' 를 포함하는지 체크합니다. X를 포함하면 False를 반환하고 체크 함수를 종료합니다.
::
오래간만에 파이썬을 잊지 않으려고 프로그래머스에 들어와봤습니다ㅎㅎ.
알고리즘 문제를 정말 오랜만에 풀어보니 감을 완전히 잃어버렸네요ㅠ 레벨 1도 넘 어렵습니다ㅠ
빡구현으로 풀어서 그냥 참고 정도만 해주시면 감사하겠습니다!
'✅ 문제풀이' 카테고리의 다른 글
프로그래머스 Level 1 문자열 나누기 Javascript (0) | 2023.10.14 |
---|---|
프로그래머스 - 대충 만든 자판 파이썬 python (0) | 2023.10.09 |
[그리디 알고리즘] 이코테 - 1이 될 때까지 (0) | 2021.12.01 |
프로그래머스 - 괄호변환 파이썬 python (0) | 2021.11.18 |
BOJ-백준 15654번 N과 M(3) C++ (0) | 2021.10.28 |