일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ESlint
- SSR
- CORS
- 태그된 유니온
- dfs
- 무한 스크롤
- 호이스팅
- TS
- app router
- useAppDispatch
- 이분 검색
- CI/CD
- RTK Query
- React
- webpack
- Jest
- async/await
- recoil
- 인터섹션
- 타입 좁히기
- 반공변성
- Cypress
- tailwind
- 투포인터
- Promise
- 리터럴 타입
- autosize
- map
- 결정 알고리즘
- 공변성
Archives
- Today
- Total
짧은코딩
금광 본문
반응형
해결법
1. 이 문제에서 값을 일차 배열로 준다. 그렇기에 우린 이것을 이차 배열로 바꿔야 한다.
2. 오른쪽과 오른쪽 위, 아래로 이동할 수 있다는 것은 반대로 생각하면 왼쪽과 왼쪽 위, 아래에서 온다는 의미이다.
3. 쭉 더하고 마지막 열 중에서 가장 큰 값을 찾는다.
코드
answer = []
for t in range(int(input())):
n, m = map(int, input().split())
ary = list(map(int, input().split()))
dp = []
index = 0
for i in range(n):
dp.append(ary[index:index + m])
index += m
for j in range(1, m):
for i in range(n):
# 왼쪽 위면 더 위가 없어서 0
if i == 0:
left_w = 0
else:
left_w = dp[i-1][j-1]
left = dp[i][j-1]
# 왼쪽 아래면 더 아래가 없어서 0
if i == n-1:
left_s = 0
else:
left_s = dp[i+1][j-1]
dp[i][j] = dp[i][j] + max(left_w, left, left_s)
result = 0
for i in range(n):
result = max(result, dp[i][m-1])
answer.append(result)
for i in answer:
print(i)
일차 배열을 이차 배열로 바꾸는 법을 잘 알아둬야겠다.
풀이 생각을 하지못해서 교재 풀이 보고 이해한다음 안보고 풀었다ㅠㅠ
반응형
'코딩 테스트(Python) > 이것이 취업을 위한 코딩 테스트다' 카테고리의 다른 글
정렬된 배열에서 특정 수의 개수 구하기(이진 탐색 라이브러리 bisect) (1) | 2022.07.24 |
---|---|
10825 국영수(다중 정렬) (1) | 2022.07.22 |
18352 특정 거리의 도시 찾기 (1) | 2022.07.21 |
18406 럭키 스트레이트 (0) | 2022.07.19 |
모험가 길드 (0) | 2022.07.18 |
Comments