• 오늘의 계획
    • 실리콘밸리 인턴쉽 리액트 강의듣기
      • 프로그래머스/백준 사이트에서 알고리즘 문제 풀이(동적 프로그래밍)

  • 오늘의 회고

    • react 정리 (~1:11:48)
      • html은 xml문법을 써서 웹 브라우저에 어떻게 표시할 것인가?를 나타낸 문법이다.
      • 자바스크립트는 ECMA(에크마)스크립트라(=ES6)고 하는 문법과 실제 화면을 그리는 DOM을 합쳐놓은 것이다.
      • react란
        1. Facebook이 개발한 오픈소스
        2. 가장 대중적인 UI 프레임워크
        3. Virtual DOM을 활용하여 성능 최적화
        4. 선언적 화면(Declarative View) 개발
          • 쓰기 쉽고 성능도 좋다. -> 가성비가 뛰어난 프레임 워크
      • Virtual DOM이란
        1. 가상의 DOM에서 새로운 HTML트리를 만들어 한번에 교체하는 방식
        2. 초당 60프레임으로 제한하여 성능 최적화
        3. 필요한 부분만을 찾아서 변경
      • const add = function() { … } 와 같이 변수에 함수를 할당할 수 있다. (비동기를 잘 처리하기 위해)
      • babel을 통해 새 문법으로 작성한 코드를 기존 문법에 호환되는 코드로 바꾸어준다.
      • 최대한 불변 객체로 짜야한다. (const) => 변경이 될 때 새 불변 객체를 만들어 선언한다.
      • 모듈화로 인해 웹도 app처럼 개발할 수 있어졌다.
      • reduce를 통해 Map을 HashMap으로 바꿀 수 있다.
    • 동적 프로그래밍 문제 풀이 : 등굣길(프로그래머스 LEVEL 3) image image image

      • 해결 방법 : 처음에는 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문제 밖에 해결하지 못하였다. 다음부터는 더 열심히 풀어보도록 해야겠다.