- 오늘의 계획
- 실리콘밸리 인턴쉽 리액트 강의듣기
- 프로그래머스/백준 사이트에서 알고리즘 문제 풀이(동적 프로그래밍)
- 실리콘밸리 인턴쉽 리액트 강의듣기
-
오늘의 회고
- react 정리 (~1:11:48)
- html은 xml문법을 써서 웹 브라우저에 어떻게 표시할 것인가?를 나타낸 문법이다.
- 자바스크립트는 ECMA(에크마)스크립트라(=ES6)고 하는 문법과 실제 화면을 그리는 DOM을 합쳐놓은 것이다.
- react란
- Facebook이 개발한 오픈소스
- 가장 대중적인 UI 프레임워크
- Virtual DOM을 활용하여 성능 최적화
- 선언적 화면(Declarative View) 개발
- 쓰기 쉽고 성능도 좋다. -> 가성비가 뛰어난 프레임 워크
- Virtual DOM이란
- 가상의 DOM에서 새로운 HTML트리를 만들어 한번에 교체하는 방식
- 초당 60프레임으로 제한하여 성능 최적화
- 필요한 부분만을 찾아서 변경
- const add = function() { … } 와 같이 변수에 함수를 할당할 수 있다. (비동기를 잘 처리하기 위해)
- babel을 통해 새 문법으로 작성한 코드를 기존 문법에 호환되는 코드로 바꾸어준다.
- 최대한 불변 객체로 짜야한다. (const) => 변경이 될 때 새 불변 객체를 만들어 선언한다.
- 모듈화로 인해 웹도 app처럼 개발할 수 있어졌다.
- reduce를 통해 Map을 HashMap으로 바꿀 수 있다.
-
동적 프로그래밍 문제 풀이 : 등굣길(프로그래머스 LEVEL 3)
- 해결 방법 : 처음에는 dfs 또는 재귀로 문제를 해결하려고 했으나 동적 프로그래밍 방법을 이용하였다.
- 학교의 위치가 n,m일 때 학교까지의 최적의 경로의 개수는 윗칸(n-1,m)까지의 최적의 경로의 합 + 왼쪽칸(n,m-1)까지의 최적의 경로의 합이다.
- 따라서 2차원 리스트의 각 행,열을 1씩 크게 만들어 0으로 초기화하여 우물이거나 집일 때 점화식을 생략하고, 그 외의 경우에는 점화식을 활용해 위쪽 칸과 왼쪽 칸까지의 최적의 경로를 더해주었다.
- 점화식 : route[n][m] = route[n-1][m] + route[n][m-1]
-
코드 :
```python def solution(m, n, puddles): # 점화식 : route[n][m] = route[n-1][m] + route[n][m-1] route = [[0]*(m+1) for _ in range(n+1)] # 초기화 route[1][1] = 1 # 집 for i in range(1, n+1): for j in range(1, m+1): if [j, i] in puddles or (i == 1 and j == 1): # 우물이거나 집인 경우 continue route[i][j] = route[i-1][j] + route[i][j-1] return route[n][m] % 1000000007 ```
- 2문제를 해결하는 것을 목표로 하였으나 1문제 밖에 해결하지 못하였다. 다음부터는 더 열심히 풀어보도록 해야겠다.
- react 정리 (~1:11:48)