• 오늘의 계획

    • 대표적인 관계형 DB인 MYSQL 강의 듣기

      - 섹션 1. Database 2 - MySQL 서론
      
    • 동적 프로그래밍 알고리즘 공부 및 문제 풀이


  • 오늘의 회고 image - 인프런 DataBase 강의 수강 - 관계형 데이터베이스는 데이터를 표의 형태로 정리정돈 가능하고, 정렬 검색과 같은 작업을 빠르고 편리하고 안전하게 할 수 있음. 코드를 통해 데이터를 조작할 수 있음. - 강의를 들으며 예전에 깔아놓았던 버전의 bitnami로 MySQL 실습을 진행하던 도중 MySQL 비밀번호를 잊어버려서 일부분 하지 못하였다. 다음주 모각코 모임 전 까지 해오도록 하겠다.

    - 동적 프로그래밍 알고리즘 문제 : 프로그래머스 LEVEL 3(정수 삼각형)
    	- 동적 프로그래밍 알고리즘 : 동적 프로그래밍은 큰 문제를 작은 문제로 나누어 해결하는 방식이다. 따라서 이미 해결한 작은 문제들에 대해서는 다시 수행하지 않고, 다른 곳에 저장해 두었다가 나중에 그 값을 사용하는 형태로 해결한다.
    
    ![image](https://user-images.githubusercontent.com/34560965/103775816-ef39c800-5071-11eb-8ee4-797813860ca0.png)
    	**-해결 방법** : 우선 반복문을 통해 삼각형에서 좌측 끝과 우측 끝 그리고 내부의 경우 3가지로 나누어 해결하였다. 좌측 끝과 우측 끝의 경우 바로 위 까지의 합과 현재 triangle에서의 값을 더하고, 내부일 경우 좌측에서 오는 경우와 우측에서 오는 경우로 나누어 두 값중 큰 값을 선택하도록 하였다. 이중 for문에서 내부 반복문의 종료 전, 현재까지의 answer과 비교하여 큰 값을 선택하도록 하였다. 공간의 절약을 위해 이차원 배열도 동적으로 할당하였다.
    
    - 코드
    
#include <string>
#include <vector>
#include <stdio.h>
#include <string.h>

using namespace std;

int solution(vector<vector<int>> triangle) {
    int height = triangle.size();
    int answer = triangle[0][0];
    int** dp = new int* [height]; //공간 절약을 위한 동적 할당
    for (int i = 0; i < height; ++i) {
        dp[i] = new int[height];
        memset(dp[i], 0, sizeof(int) * height);
    }
    dp[0][0] = answer;
    if (height == 1) return answer;

    for (int i = 1; i < height; i++) { //세로
        for (int j = 0; j <= i; j++) { //가로
            if (j == 0) { //좌측 끝
                dp[i][j] = dp[i - 1][j] + triangle[i][j];
            }
            else if (j == i) { //우측 끝
                dp[i][j] = dp[i - 1][j - 1] + triangle[i][j];
            }
            else { //내부
                //내부의 경우 왼쪽에서 오는 경우와 오른쪽에서 오는 경우 중 큰 값을 선택
                dp[i][j] = (dp[i - 1][j] > dp[i - 1][j - 1]
                    ? dp[i - 1][j] : dp[i - 1][j - 1])
                    + triangle[i][j];
            }

            answer = (dp[i][j] > answer ? dp[i][j] : answer); //큰 값으로 교체
        }
    }

    for (int i = 0; i < height; ++i) {
        delete[] dp[i];
    }
    delete[] dp;


    return answer;
}