- 오늘의 계획
- 대표적인 관계형 DB인 MYSQL 강의 듣기
- 섹션 0. Database 1 - DATABASE 소개 및 본질 알아보기
- greedy 알고리즘 문제 풀이!
- 대표적인 관계형 DB인 MYSQL 강의 듣기
-
오늘의 회고
- 인프런 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;
}
}