Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 너비우선탐색
- 이메일인증
- 프로그래머스
- 노드개발자
- static final
- SWEA
- 쪽지기능
- 백준 2667
- 앱개발
- 노드프로젝트
- 파이썬
- springboot
- DFS
- 실버5
- 1260
- 코딩
- Java
- 자바
- nodejs
- 브실이의입시전략
- 코테
- Gmail인증
- 깊이우선탐색
- Python
- email인증
- 코딩테스트
- BFS
- 노드개발
- 백준
- 알고리즘
Archives
- Today
- Total
데옹의 블로그
[Python] 프로그래머스 - 공원 산책 [level 1] 본문
문제를 제대로 읽지 않으면 경로 탐색이라고 생각이 되는 문제입니다.
하지만 그냥 별 거 없는 문제였죠? 간단한 구현 문제였던 것 같습니다만.. (알고리즘 잘 모름)
생각해야 할 것들은 아래와 같습니다.
- 이건 한 칸씩 가는 문제가 아닌, 경로에 문제가 있다면 애초에 가지를 말아야 합니다.
- N,S를 잘 보고 풀어야 합니다. N은 북쪽, S는 남쪽이라 헷갈릴 수 있지만 N은 y축 숫자를 줄여야하고, S는 y축 숫자를 늘려야 합니다.
- 반환 값이 [세로 좌표, 가로 좌표] 입니다.
위에 것들만 신경쓰면 진짜 쉬운 문제였습니다.
쓰잘데 없는 설명은 치우고 그냥 코드에 주석 달겠습니다.
귀찮아도 하나씩 읽어보면 이 사람이 왜 이렇게 풀었나 알 수 있을 것이라 생각됩니다! 피드백 마구마구 하세요.
def solution(park, routes):
# dictionary로 한 이유는 그냥 빠를 것 같아서 입니다.
# 한 번에 저장하고 바로바로 찾을 수 있게 했습니다. (if/elif/else문 쓰기 싫어서)
d = {"E": (1,0), "W": (-1,0), "S": (0,1), "N": (0,-1)}
# 시작 위치를 찾아서 바로 x,y에 할당합니다.
# 할당하고 나서는 for문이 딱히 필요가 없기 때문에 break 했습니다.
for i in range(len(park)):
if "S" in park[i]:
x, y = park[i].index("S"), i
break
# 여기서부터 시작인데 굉장히 간단해요.
# tempx, tempy => 임시로 x,y를 저장해두는 변수
# tempx, tempy는 처음에 더해도 되나? 싶었는데 그럼 장애물이 있는 지 판단할 수 없다고 생각했습니다.
# 그래서 한 칸씩 가면서 판단하기로 했습니다.
for i in routes:
tempx, tempy = x, y
v, cnt = i.split()
# ex) d["W"] 라면 (-1,0)이 반환됨.
dx, dy = d[v]
# cnt만큼 가다가 문제가 생기면 바로 취소 때리기
for j in range(int(cnt)):
# park를 벗어나거나, 장애물이 있을 경우엔
# 바로 break를 걸었습니다.
# 그리고 정상적인 루트일 경우에는 tempx와 tempy에 정확한 값을 집어넣습니다.
if 0 <= tempx + dx < len(park[0]) and 0 <= tempy + dy < len(park) and park[tempy+dy][tempx+dx] != "X":
tempx, tempy = tempx + dx, tempy + dy
else:
break
# 문제가 없었다면 for문은 정상적으로 끝이 났을테고,
# break가 없었으니 for - else문을 활용해 임시 좌표값을 다시 x,y에 할당합니다.
else:
x, y = tempx, tempy
# 반환! (세로좌표, 가로좌표) -> 문제에서 이렇게 반환하라고 함
return [y,x]
'python' 카테고리의 다른 글
[Python] 프로그래머스 - 튜플 (level 2) (2) | 2023.11.09 |
---|---|
[SWEA] 19003. 펠린드롬 문제(D3) (8) | 2023.11.08 |
[Python/파이썬] 백준 2667 : 단지번호붙이기 (+ 전 코드 리뷰) (0) | 2023.06.19 |
[Python/파이썬] 백준 2606 : 바이러스 (0) | 2023.06.18 |
[Python/파이썬] 백준 1260 : DFS와 BFS (0) | 2023.06.17 |