알고리즘 그리디(greedy), 관계형 데이터베이스 SQL[TIL 2021.08.30]

JUNGHUN KIM·2021년 8월 31일
0
post-custom-banner

😊Today Learn

  • 그리디 알고리즘에 대한 복습 및 문제풀이
  • 서버와 데이터베이스간 SQL을 이용하여 서버에서 데이터베이스로 쿼리를 날려 CRUD중 C와R에 대해서 학습
  • API문서 읽는 방법 연습

하루 회고

  • 기존에 그리디문제를 풀때, 왜 이걸 그리디라고 하는지에 대해 크게 이해하지 못하였지만, 오늘 다시한번 그리디 알고리즘에 대해 읽어보고 문제를 풀어보니 어느 케이스에 그리디 알고리즘을 사용해야하는지 어느정도 감을 잡은것 같다.
  • 서버와 데이터베이스간 데이터를 주고 받을때 사용하는 sql문에 대해서 다시한번 공부하였다.
  • 아직 클라이언트,서버,데이터베이스간 데이터를 주고받는 흐름에 대해서 명확하게 이해하지 못하였다.
  • 스키마가 N:M관계일경우 JOIN테이블을 하나 만들어서 1:M , N:1의 관계로 만들어야 하는 이유에 대해서 다시한번 복습

그리디 알고리즘

  • Greedy는 "탐욕스러운, 욕심 많은" 이란 뜻이며 Greedy Algorithm(탐욕 알고리즘)은 말 그대로 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법그리디 알고리즘으로 문제를 해결하는 방법은 다음과 같이 단계적으로 구분이 가능

즉 가장 최적의 값을 찾는것이라고 보면된다. 만약 물건을 사고 거스름돈을 주어야 할 경우 가장 큰 단위의 지폐나 동전을 먼저 준다음 나머지 단위의 지폐나 동전으로 거스름돈을 거슬러주어 최적화 시킨다고 보면된다.

  1. 선택 절차(Selection Procedure): 현재 상태에서의 최적의 해답을 선택
  2. 적절성 검사(Feasibility Check): 선택된 해가 문제의 조건을 만족하는지 검사
  3. 해답 검사(Solution Check): 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아가 위의 과정을 반복

코드예시
문제: 거스름돈을 거슬러줘야 할경우 동전의 갯수를 최소화하는 알고리즘.

function partTimeJob(k) {
  // 내가 총 거슬러줘야 하는돈이 k
  let coin = [500,100,50,10,5,1]
  let result = 0  // 현재까지 최고의 효율로 세어둔 돈.
  let count = 0  //현재 사용한 동전의 갯수

  for(let key of coin){
    while(result <= k){
      result = result + key
      count++
    }
    if(result > k){
      result = result -key
      count--
    }
  }

  return count
}
profile
개발자가 되고 싶은 일문학도
post-custom-banner

0개의 댓글