Welcome! 🙋‍♂️ View more

LeetCode 2

[알고리즘] 다이나믹 프로그래밍 (feat. Leetcode)

다이나믹 프로그래밍이란? 큰 문제를 작은 문제로 나누어 풀고, 작은 문제의 답을 재활용하는 기법을 의미한다. 메모리 비용을 활용하여 시간적 비용을 줄이는 방식이다. 👉 조건 부분 반복 문제: 작은 문제가 반복되는 경우 최적 부분 구조: 같은 문제는 구할 때마다 정답이 같을 경우 작은 문제가 반복되고 그 문제의 답이 같기 때문에, 굳이 작은 문제에 대한 계산을 반복하지 않고 이를 메모리에 저장하여 활용하는 것이다. Fibonacci 수열 DP를 설명할 때 가장 기본적으로 예를 들 수 있는 것이 Fibonacci 수열이다. 이는 f(n) = f(n-1) + f(n-2)의 점화식을 가진다. 아래 Leetcode 문제를 재귀 함수를 이용하는 방법과 동적 프로그래밍을 사용하는 방법으로 풀어볼 것이다. https:..

[Leetcode/Python] 48. Rotate Image

🤔 문제. 2차원 배열을 시계방향으로 돌리는 간단한 문제입니다. 🤗 풀이. [단순 구현] 처음 풀었던 방식은 순수한 구현이었다. 끝에서 부터 한 바퀴씩 돌며 좌표를 담는 xy_list와 값을 담는 v_list를 만든 뒤, v_list 값을 수정해서 matrix를 재구성하였다. 통과는 했지만, 실행 시간이 오래걸렸다. HTML 삽입 미리보기할 수 없는 소스 [간단한 방법] 위에서는 2차원 배열을 1차원 배열로 바꿔서 풀려는 시도를 했다. 하지만 2차원 배열을 전체적으로 움직이며 푸는 방법이 있었다. matrix를 행을 중심으로 뒤집는다. matrix를 대각선을 중심으로 뒤집는다. HTML 삽입 미리보기할 수 없는 소스 실행속도는 2배 정도 차이난다... 역시 알고리즘 문제는 구현 전에 생각을 해야한다! 😓