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 | 31 |
Tags
- 알람 시스템
- branch 전략
- 좋은 코드 나쁜 코드
- 완전탐색
- AWS
- 누적합
- gRPC
- BFS
- 숫자 블록
- 백준
- 결제서비스
- 트랜잭샨
- 검색어 추천
- 셀러리
- 카카오
- prg 패턴
- 깊게 생각해보기
- 쿠키
- 구현
- 이분탐색
- 객체지향패러다임
- docker
- jwt 표준
- 코드 계약
- 수신자 대상 다르게
- 레디스 동시성
- piplining
- 프로그래머스
- 디버깅
- spring event
Archives
- Today
- Total
코딩관계론
[프로그래머스] 등굣길 본문
반응형
문제 이해하기
등굣길 경로의 경우의 수를 구하는 문제이다.
좌표 (1,1)인 집에서 부터 (m,n)인 학교까지 가는 경로를 구하는 문제인데 사이에 웅덩이를 피해 가야한다.
경우의 수를 계산해보면 200!/(100! * 100!)이 된다. 매우 큰 수이기 때문에 완전탐색으로는 제한시간안에 답을 찾을 수 없다.
https://m.blog.naver.com/parkhc1992/220669287080
문제 해결 방법 설명하기
1. 최단거리 구하는 수 계산하기
최단 거리를 구하는 경우의 수는 아래의 그림과 같다. 이를 코드로 구현하면 아래와 같다.
def dfs(m, n, x, y, puddles, dp):
if out_of_range(m, n, x, y) or [x, y] in puddles:
return 0
if x == m and y == n:
return 1
dp[y][x] = 0
dp[y][x] += dfs(m, n, x + 1, y, puddles, dp) + dfs(m, n, x, y + 1, puddles, dp)
return dp[y][x] % 1000000007
2. 경우의 수 기억하기
하지만 탐색 가능한 경우의 숫자가 많기 때문에 기존의 탐색한 경우의 수를 기억한 후 재탐색이 불가능하게 만들어줘야 한다.
그 방법은 아래와 같다. 이렇게 되면 모든 선분을 한번만 방문하기 때문에 최대 M *N *4가 된다. 엄밀히 말하면 이 숫자보다 더 작을 것이다.
def dfs(m, n, x, y, puddles, dp):
if out_of_range(m, n, x, y) or [x, y] in puddles:
return 0
if x == m and y == n:
return 1
if dp[y][x] != -1:
return dp[y][x]
dp[y][x] = 0
dp[y][x] += dfs(m, n, x + 1, y, puddles, dp) + dfs(m, n, x, y + 1, puddles, dp)
return dp[y][x] % 1000000007
코드
def out_of_range(m, n, x, y):
return x < 1 or x > m or y < 1 or y > n
def dfs(m, n, x, y, puddles, dp):
if out_of_range(m, n, x, y) or [x, y] in puddles:
return 0
if x == m and y == n:
return 1
if dp[y][x] != -1:
return dp[y][x]
dp[y][x] = 0
dp[y][x] += dfs(m, n, x + 1, y, puddles, dp) + dfs(m, n, x, y + 1, puddles, dp)
return dp[y][x] % 1000000007
def solution(m, n, puddles):
answer = 0
dp = [[-1] * (102) for _ in range(102)]
answer = dfs(m, n, 1, 1, puddles, dp)
return answer
if __name__ == "__main__":
m = 4
n = 3
puddles = [[2, 2]]
print(solution(m, n, puddles)) # 4
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 금과 은 운반하기 (1) | 2024.04.24 |
---|---|
[프로그래머스] 예산 (0) | 2024.04.22 |
[프로그래머스] 피로도 (0) | 2024.04.21 |
[프로그래머스] 퍼즐 조각 (0) | 2024.04.16 |
[프로그래머스] 아이템 줍기 (0) | 2024.04.14 |