• 오늘의 계획
    • 대표적인 관계형 DB인 MYSQL 강의 듣기
      • 섹션 0. Database 1 - DATABASE 소개 및 본질 알아보기
      • greedy 알고리즘 문제 풀이!

  • 오늘의 회고

    -  인프런 DataBase 강의 24분 수강
    

    캡처 - 입력은 데이터의 생성, 수정, 삭제의 세 과정으로 나눌 수 있고, 출력은 데이터를 읽는 과정을 가진다. 따라서 두 개를 합쳐 CRUD로 불리고, 데이터의 정리 정돈을 위해 file - spreadsheet - database의 과정을 거쳐왔다.

    - Greedy 알고리즘 문제 : 프로그래머스 level 1(체육복)
    	- greedy 알고리즘 : 문제를 해결하는 과정에서의 순간순간마다 최적의 결정을 하여 최종 해답에 도달하는 문제 해결 방식이다. 잘 작동하기 위해서는 앞의 선택이 이후의 선택에 영향을 주지 않는 조건인 탐욕스러운 선택 조건과 문제에 대한 최종 해결 방법이 부분적인 문제에 대해서도 최적의 해결 방법이라는 최적 부분 구조 조건의 두 조건을 만족해야 한다.
    
    ![ddddd](https://user-images.githubusercontent.com/34560965/103359062-7dee9800-4afa-11eb-8e11-08472376fe64.JPG)
    	**-해결 방법** : 초기 값이 모두 0인 배열로 복사한 뒤 체육복을 도난 당한 학생은 -1, 여벌의 체육복을 가진 학생은 +1 하여 초기값을 결정해준다. 그 후 반복문으로 도난당한 학생의 앞 번호나 뒷 번호의 학생이 여벌 체육복을 갖고 있다면(>0 이라면) 도난당한 학생의 값을 1 증가시키고, 여벌의 체육복을 가진 학생의 값을 1 감소시킨다. 반복문의 종료 후 0보다 작은 값을 가진 학생의 수 만큼 감소시켜 반환한다.
    
    - 코드
    
	class Solution {
			public int solution(int n, int[] lost, int[] reserve) {
      	  int answer = 0;
          //초기값이 모두 0인 배열로 복사
          int[] student = new int[n];

          //체육복을 도난당한 학생은 -1
          for(int lost_student : lost){
              student[lost_student-1]--;
          }
          //여벌의 체육복이 있는 학생은 +1
          for(int reserve_student : reserve){
              student[reserve_student-1]++;
          }
          for(int i = 0; i < student.length; i++){
              if(student[i] < 0){ //도난당한 학생
                  if(i!=student.length-1 && student[i+1] > 0){ //뒷 번호가 여벌의 체육복 가진 경우
                          student[i]++;
                          student[i+1]--;
                      }
                  }
                  else if(i!=0 && student[i-1] > 0){ //앞 번호가 여벌의 체육복 가진 경우
                          student[i]++;
                          student[i-1]--;
                  }
              }
          }
    	  //카운팅
          for(int i = 0; i<student.length; i++){
              if(student[i] < 0){
                  n--;
              }
          }
          answer = n;

          return answer;
          }
  }