[BOJ] [Python] 11055번 : 가장 큰 증가 부분 수열
[1, 100, 2, 50, 60, 3, 5, 6, 7, 8]를 예로 이해하고 해결해보자. dp에는 자기 자신의 값이 초깃값으로 들어가 있다. 이제 0번째부터 9번째까지 하나씩 확인하며, dp를 늘려줄 것이다. 규칙은 아래와 같다. n번째) 0번째부터 n-1번째까지 돌면서, 1. n번째 수보다 작은 값을 찾는다. 2. 작은 값들이 가진 dp중 최대의 dp를 n번째 dp에 더해준다. 예를 들어, 지금 4번째라고 한다면 50보다 작은 값은 1과 2이다. 1보다 2의 dp값이 더 크므로, 2의 dp값에 50을 더해준다. 더해진 값은 50의 dp값이 된다. 마지막에 dp 리스트의 최댓값을 출력하면, 가장 큰 증가 부분 수열의 합을 찾을 수 있다. num = int(input()) li = list(map(int..
[BOJ] [Python] 1753번 : 최단경로
처음에는 2차원 배열을 이용해서 푸려는 무모한 계획을 세웠다. 이 문제에서 2차원 배열을 이용하려면, 최대 20000 x 20000[400,000,000]이 필요하다. 파이썬은 300,000,000부터 메모리 초과가 난다. 100,000,000에 381MB이다. 이 문제는 메모리가 256MB 제한이라서 300,000,000보다 작아도 메모리 초과이다. 그래서 2차원 배열 대신 heapq를 이용하여 풀었다. heapq를 사용한 이유는 최단 거리에 있는 노드를 선택하기 위함이다. 아래 예시로 설명해보면, 4로 가는 최단 거리에 있는 노드는 3이다. heapq가 없었다면, 2->4부터 계산하고 그다음에 3->4를 계산할 것이다. 그렇게 되면 4는 2번이나 이전보다 짧은 최단 거리를 만들었기 때문에, 4가 순서..