웹 컴포넌트에 조금 익숙해졌다. 컴포넌트에 데이터를 전달하는 것, render메서드의 진짜 역할 등을 알 수 있었다.
Dynamic Programming
다이나믹 프로그래밍은 다음 두 가지 개념을 알아야 한다.
최적 부분 구조
중복되는 부분 구조
- 피보나치 문제를 다시 예를 들면, 부분 문제들로 나누었을 때, 아래 그림과 같이 같은 색으로 표시된 것은 중복된다. 이렇게 중복되는 부분 문제들을 매번 계산하는 것은 비효율적이다. 다이나믹 프로그래밍 알고리즘 패러다임에서는 이런 중복되는 부분문제들을 중복 계산하는 것을 피하는 기법을 사용한다.
정리하자면, 어떤 문제가 최적 부분구조를 지니고, 중복되는 부분 문제들이 있다면 다이나믹 프로그래밍을 이용해서 중복 계산을 피하면서 효율적으로 문제를 해결할 수 있다.
다이나믹 프로그래밍의 핵심은 한 번 답을 구한 문제는 다시 계산하지 않는 것이다. 답을 기억해둠으로써 중복을 피하는 구조이다.
실제 다이나믹 프로그래밍은 다음과 같은 두 가지 방법으로 구현된다.
Memoization
Tabulation
Greedy Algorithm
미래를 내다보지 않고 당장 눈 앞에 보이는 최적의 선택을 하는 방식을 그리디 알고리즘이라고 한다.
장점
단점
- 정답이 보장되지 않는다
그리디 알고리즘은 최적의 답을 보장해주지 않는다. 하지만 분명 그리디 알고리즘으로 최적의 답을 구할 수 있는 문제들도 있다. 그렇다면 언제 그리디 알고리즘을 사용할 수 있는지 알아보자. 아래의 두 속성을 가진 문제라면, 해당 문제는 그리디 알고리즘으로 최적의 솔루션을 찾을 수 있다.
최적 부분 구조
탐욕적 선택 속성
주간 미션 웹 컴포넌트화
자세한 내용은 여기에 정리해두었다.
웹 컴포넌트를 맨땅에 헤딩식으로 하려고 해서 시간이 오래 걸렸다.