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 |
Tags
- dfs
- 티스토리챌린지
- Dynamic Programming
- LEVEL 2
- 소프티어
- Lv. 2
- softeer
- Baekjoon
- 너비 우선 탐색
- 자바스크립트
- Lv. 3
- Java
- SQL 고득점 KIT
- programmers
- 프로그래머스
- group by
- Lv. 0
- select
- 파이썬
- 오블완
- SQL
- bfs
- javascript
- join
- Lv. 1
- 깊이 우선 탐색
- level 3
- 동적계획법
- Python
- DP
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 Lv.3 [2023 KAKAO BLIND RECRUITMENT] 미로 탈출 명령어 Python 본문
문제 링크 : https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&partIds=37527
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
정답 코드
import sys
sys.setrecursionlimit(10**9)
result = "z"
def solution(n, m, x, y, r, c, k):
dist = abs(x - r) + abs(y - c)
if dist > k or (k - dist) % 2 == 1:
return "impossible"
def isValid(nr, nc):
return 1 <= nr <= n and 1 <= nc <= m
def dfs(sr, sc, res):
global result
if res > result:
return
if len(res) + abs(sr-r) + abs(sc-c) > k:
return
if (sr, sc) == (r, c) and len(res) == k:
result = res
return
for dr, dc, dd in ((1, 0, "d"), (0, -1, "l"), (0, 1, "r"), (-1, 0, "u")):
nr = sr + dr
nc = sc + dc
ns = res + dd
if isValid(nr, nc) and res < result:
dfs(nr, nc, ns)
dfs(x, y, "")
return result
핵심 부분
if len(res) + abs(sr-r) + abs(sc-c) > k:
return
느낀점
아무리 문제를 잘 풀었다고 하더라도 시간복잡도에 대한 개념이 부족할 경우 쉬운 문제도 오래 걸리게 된다. 문제 푸는 것 까지는 좋았는데 가지치기 부분에서 조금 어려웠다. 이번 가지치기는 움직인 거리와 움직여야 하는 거리(현재 지점부터 도착 지점까지의 거리)가 k(총 움직여야 하는 거리)보다 큰 경우 return해야 한다. 거리에 대한 개념이 부족했을뿐더러 오랜만에 dfs문제를 풀어서 더욱 찾기 어려운 부분이었다.
'알고리즘' 카테고리의 다른 글
프로그래머스 Lv2 양궁대회 Python (0) | 2023.09.10 |
---|---|
프로그래머스 Lv2 택배 배달과 수거하기 Python (0) | 2023.09.10 |
Softeer level3 [HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 Python (0) | 2023.08.29 |
Softeer level3 우물 안 개구리 Python (0) | 2023.08.28 |
Softeer level3 동계 테스트 시점 예측 Python (0) | 2023.08.27 |