• 오늘의 계획

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

      - 섹션 2. MySQL 기본
      
    • 완전 탐색 알고리즘 공부 및 문제 풀이

          - 프로그래머스 문제 풀이
      

  • 오늘의 회고 image - 인프런 DataBase 강의 수강 image (출처 : 생활코딩) - table들을 grouping 한 것을 데이터 베이스(스키마)/ 이 스키마들이 저장된 곳이 데이터 베이스 서버
    image - CREATE DATABASE name; 명령어로 database를 생성할 수 있다. image - DROP DATABASE name; 명령어로 database를 삭제할 수 있다.
    image - SHOW DATABASES; 명령어로 database들을 표시할 수 있다.
    image - database 사용 전 USE name; 명령어로 사용을 알려야 한다. 앞으로의 명령을 name이라는 database(스키마)에 있는 표를 대상으로 실행함

    - 완전 탐색 알고리즘 문제 : 프로그래머스 LEVEL 2(카펫)
    	- 완전 탐색 알고리즘 : 완전 탐색 알고리즘은 모든 경우의 수를 고려하는 탐색 알고리즘이다. 완전 탐색의 방법으로는 다음과 같은 방법이 있다.
            - Brute Force : for문과 if문을 이용하여 처음부터 끝까지 탐색하는 방법
            - 비트 마스크 : 이진수 표현을 자료구조로 사용하는 방법
            - 재귀 함수 : 함수 내에서 함수 자기 자신을 계속해서 호출하는 것
            - 순열 : 서로 다른 n개의 원소에서 r개의 중복을 허용하지 않고 순서대로 늘어 놓은 수
            - 백트랙킹 : 분할 정복을 잉요한 기법, 재귀 함수를 이용, 답을 찾아가는 도중 답이 될 것 같지 않다면 되돌아간다.
            - BFS : 너비 우선 탐색
            - DFS : 깊이 우선 탐색
    
    
        ![image](https://user-images.githubusercontent.com/34560965/104460338-52d37080-55f1-11eb-9b15-ca2eac4ebbc6.png)
    	**-해결 방법** : 우선 brown의 개수에서 네 모서리를 빼 yellow의 둘레를 알 수 있고, 그 값을 2로 나누어 yellow의 가로 세로 합을 구할 수 있다. 완전 탐색 문제이므로 가능한 모든 경우의 수를 찾기 위해 for문으로 모든 약수를 찾아 그 약수중 큰 값을 가로, 작은 값을 세로로 설정했다. 이렇게 찾아 설정한 가로 세로가 yellow의 가로 세로의 합과 같은 경우일 때 answer vector에 push하여 문제를 해결하였다. 이 때 row와 col은 yellow의 가로와 세로이므로 전체 카펫을 요구하는 문제에서의 답은 각각 + 2를 해주어 해결하였다.
    
        - 코드
    
        ```
        #include <string>
        #include <vector>
    
        using namespace std;
    
        vector<int> solution(int brown, int yellow) {
        vector<int> answer;
        int total_size = brown*yellow;
        int horizontalPlusVertical = (brown-4)/2; //yellow의 가로 세로 합
        for(int i = 1; i*i<=yellow; i++){
        if(yellow%i == 0){ //약수 찾기
            int row = (i >= yellow/i ? i : yellow/i); //큰 값을 가로
            int col = yellow/row; //작은 값을 세로
                if(horizontalPlusVertical == row+col){ //두 값의 합이 yellow의 가로 세로 합과 같은 것이 최종 카펫
                answer.push_back(row+2); //전체 카펫의 가로는 yellow의 가로 + 2
                answer.push_back(col+2); //마찬가지로 세로 + 2
                break;
                }
            }
        }
    
        return answer;
        }
        ```