Hyemi Lee

Hyemi Lee

주니어 개발자의 삽질과 기록

Algorithm, programmers, 42885(구명보트)

  • 난이도 하 / 탐욕법

    탐욕법

    정의

    : 미리 정한 기준에 따라서 매번 가장 좋아 보이는 답을 선택하는 알고리즘

  • 최적화 문제를 푸는데 사용한다
  • 근시안적으로 해를 구할 당시에 가장 최적인 해를 구한다
  • 동적 계획법보다 효율적이지만 반드시 최적의 해를 구해준다는 보장이 없다

탐욕 알고리즘의 활용

최소수의 동전으로 거스름돈 거슬러주기

편의점에서 돈을 거슬러 줄 때에는 서비스 차원에서 최소한의 동전 개수로 돈을 거슬러 주는 게 좋다. 거스름돈이 550원인데 50원짜리 11개를 주면 받는 손님은 불쾌할 것이다. 이 문제의 해는 거슬러 줄 총액에 해당하는 동전의 집합이고, 최적해는 동전의 개수가 최소가 되는 집합이다.

이외

  1. 최소비용 신장트리
    • 그래프 내의 모든 정점을 최소의 비용으로 연결하는 트리)
    • ex.크루스칼 알고리즘
  2. 다익스트라 알고리즘
    • 그래프 내의 한 정점에서 다른 정점으로 가는 최단 경로를 구하는 알고리즘
  3. 허프만 코딩
    • 데이터를 압축하는 방법중의 하나로 쓰이는 알고리즘

package org.programmers;
import java.util.Arrays;
public class boat {
	public static void main(String[] args) {
		int[] p = {70,80,50};
		solution(p, 100);
	}
	public static int solution(int[] people, int limit) {
 int answer = 0;
 Arrays.sort(people);
 int head = 0;
 for(int i = people.length-1; i >= 0; i--) {
 	// 마지막 남은 한 사람
 	if (i==head) {
 		answer++;
 		break;
 	}
 	// 제일 몸무게 큰사람 + 작은 사람 이 limit보다 작으면 같이 태워보낸다
 	if (people[i] + people[head] <= limit) {
 		head++;
 		answer++;
 		// 마지막 남은 두사람이었다면 for문 나간다
 		if (i==head) {
 		break;
 	}
 	} else {
 	// 제일 몸무게 큰사람만 태워 보낸다
 		answer++;
 	}
 }
 return answer;
 }
}

Reference

Share on

Twitter Facebook LinkedIn

You may also enjoy

Redis Stream

2021年04月28日

Stream Stream은 로그 데이터를 처리하게위해 5.0에서 새로 도입된 데이터 타입입니다. 대량의 데이터가 연속적으로 발생할때 처리하기 위해 등장했습니다. 기존 데이터를 수정하지 않고 오직 추가로 발생합니다. 이런 종류의 데이터를 stream or log데이터...

Study, Object, chapter2&3 presentation

2021年04月20日

chapter03. 역할, 책임, 협력 객체지향 설계란, 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.

Spring, chatting 프로그램 만들기, Reactive란?

2020年06月16日

Reactive 막힘없이 흘러다니는 data(event)를 통해 사용자에게 자연스러운 응답을 주고 규모 탄력적으로 리소스를 사용하며 실패에 있어서 유연하게 대처한다 모든 지점에서 블럭 되지 않게 하자 oop와 같은 패러다임 모든 것을 비동기적인 data의 strea...