일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 우박수열 정적분 파이썬
- 리액트 훅
- 리액트 독학
- 프로그래머스 17677
- 2022카카오코테
- 프로그래머스 17683 파이썬
- 방금그곡 파이썬
- 프로그래머스 방금그곡
- 백준 타일링 문제
- 카카오코테
- 노마드코더 리액트
- 프로그래머스 우박수열
- 프로그래머스 134239 파이썬
- 백준 DP 문제풀이
- 코테 공부
- 노마드코더리액트
- 리액트 공부정리
- 프로그래머스파이썬
- 노마드코더
- 뉴스 클러스터링 파이썬
- 프로그래머스
- 17677 파이썬
- 백준문제풀이
- 프로그래머스 카카오코테
- 리액트공부
- 코딩테스트공부
- 노마드코더 리액트 노트정리
- PostgreSQL
- 코테공부
- 우박수열 파이썬
- Today
- Total
My Develop Log
[프로그래머스] (동적계획법[Dynamic Programming]) - 42898 등굣길 본문
문제 설명
계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다.
아래 그림은 m = 4, n = 3 인 경우입니다.
가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다.
격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 격자의 크기 m, n은 1 이상 100 이하인 자연수입니다.
- 물에 잠긴 지역은 0개 이상 10개 이하입니다.
- 집과 학교가 물에 잠긴 경우는 입력으로 주어지지 않습니다.
입출력 예
m | n | puddles | return |
4 | 3 | [[2, 2]] | 4 |
입출력 예 설명
문제풀이
def solution(m, n, puddles):
# 행열 만들기
dp = [[-1 for _ in range(m+1)] for _ in range(n+1)]
for puddle in puddles:
dp[puddle[1]][puddle[0]]=0
check=False # 1행, 1열 도중에 puddle이 있는지 확인을 위해
# 도중에 puddle이 없는한 1로 처리
for i in range(1,n+1):
if dp[i][1]==0: check=True
if check: dp[i][1]=0
else: dp[i][1]=1
check=False # 1행, 1열 도중에 puddle이 있는지 확인을 위해
# 도중에 puddle이 없는한 1로 처리
for i in range(1,m+1):
if dp[1][i]==0: check=True
if check: dp[1][i]=0
else: dp[1][i]=1
# 2행 2열부터 왼쪽과 위에 해당하는 값을 더하여 최신화 진행
for i in range(2,n+1):
for j in range(2,m+1):
if dp[i][j]==0: continue
else:
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[-1][-1]%1000000007
# print(solution(4,3,[[2, 2]]))
# 프로그래머스 -님이 올리셨던 반례 참고
#https://school.programmers.co.kr/questions/15698?question=15698
# print(solution(2, 2, []), 2)
# print(solution(3, 3, []), 6)
# print(solution(3, 3, [[2, 2]]), 2)
# print(solution(3, 3, [[2, 3]]), 3)
# print(solution(3, 3, [[1, 3]]), 5)
# print(solution(3, 3, [[1, 3], [3, 1]]), 4)
# print(solution(3, 3, [[1, 3], [3, 1], [2, 3]]), 2)
# print(solution(3, 3, [[1, 3], [3, 1], [2, 3], [2, 1]]), 1)
# print(solution(7, 4, [[2, 1], [2, 2], [2, 3], [4, 2], [4, 3], [4, 4], [6, 2], [6, 3]]), 0) # 이 값이 잘 나오면 테스트1, 테스트9 통과, 위로 가면 안됨
# print(solution(4, 4, [[3, 2], [2, 4]]), 7)
# print(solution(100, 100, []), 690285631)
반례 필요하신분은 아래 Reference에 프로그래머스 '-님'이 올리셨던 반례 참고!
Reference
https://school.programmers.co.kr/learn/courses/30/lessons/42898
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
https://school.programmers.co.kr/questions/15698?question=15698
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'코테 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 136798 기사단원의 무기 (0) | 2023.03.27 |
---|---|
[프로그래머스] (BFS/DFS) - 43164 여행경로 (0) | 2023.03.20 |
[프로그래머스] (2019 KAKAO BLIND RECRUITMENT) - 42888 오픈채팅방 (0) | 2023.03.10 |
[프로그래머스] (그리디) - 42883 큰 수 만들기 (0) | 2023.03.09 |
[프로그래머스] - 12938 최고의 집합 (0) | 2023.03.07 |