////////
Search

허진혁

 정수 삼각형

접근방법

1.
triangle 이중 리스트에 이전값과 자신의 값을 더하는 과정을 고려해보았다. (단, 값을 이동할 때 이전의 값을 사용하다보니 첫번째 행이 아닌 두번째 행부터 for문을 돌려야 한다.) memoization방식을 위해 dp 이중리스트를 만들까 생각했지만, 위의 방법이 더 나아 보였다.
2.
값을 바꿀 때 들어올 수 있는 값중 큰 값을 받도록 했다.
a.
leftdown은 이전행과 지금행의 합을 구하는 것이다.(단 맨 왼쪽에 있는 값은 leftdown만 가능)
b.
rightdown은 이전행+이전열과 지금행+지금열의 값을 더하는 것이다.(단 맨 오른 쪽에 있는 값은 rightdown만 가능)
c.
모서리가 아닌 경우는 leftdown과 rightdown중 큰 값을 받게 한다.
3.
최댓값은 마지막 행중에 가장 큰 값이므로 max(triangle[-1])식을 썻다
7
10
15
18
16
15
20
25
20
19
24
30
27
26
24
def solution(triangle): for i in range(1, len(triangle)): for j in range(len(triangle[i])): # leftdown if j == 0: triangle[i][j] += triangle[i-1][j] # rightdown elif j == len(triangle[i])-1: triangle[i][j] += triangle[i-1][j-1] else: triangle[i][j] = max(triangle[i][j] + triangle[i-1][j], triangle[i][j] + triangle[i-1][j-1]) answer = max(triangle[-1]) return answer
Python
복사

 등굣길

접근방법

1.
이동한 경우의 수를 저장할 리스트 way를 만든다
2.
물에 잠긴 지역을 표시한다
a.
-1로 표시하고 방문하고 나면 0으로 교체한다.
3.
이동할 수 있는 경우의 수를 계속해서 적립한다.
def solution(m, n, puddles): answer = 0 way = [[0]* m for _ in range(n)] way[0][0] = 1 for puddle in puddles: first = puddle[0]-1 second = puddle[1]-1 way[first][second] = -1 # print(way) for i in range(n): for j in range(m): if way[i][j] == -1: continue way[i][j] += (way[i-1][j] + way[i][j-1]) % 1000000007 print(way) answer = way[n-1][m-1] return answer
Python
복사
def solution(m, n, puddles): answer = 0 way = [[0]* (m+1) for _ in range(n+1)] way[1][1] = 1 for puddle in puddles: first = puddle[0] second = puddle[1] way[second][first] = -1 # print(way) for i in range(1, n+1): for j in range(1, m+1): if way[i][j] == -1: way[i][j] = 0 continue way[i][j] += (way[i-1][j] + way[i][j-1]) % 1000000007 print(way) answer = way[n][m] return answer
Python
복사