[programmers] Lv2. 구명보트 Javascript | 탐욕법(그리디) | protect-me

protect-me·2021년 8월 10일
0
post-thumbnail

🕊 Link

Lv2. 구명보트 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42885

👨‍👦‍👦 Others

참고1
참고2

// 1
function solution(people, limit){
	var answer = 0
    people.sort((a,b) => b-a)
    let l = 0
    let r = people.length-1
    
    while(l<r){
    	var sum = people[l] + people[r]
        if(sum>limit){
        	l++
        } else {
        	l++
            r--
        }
        answer++
    }
    if(l == r) answer++
    return answer
}

// 2
function solution(people, limit) {
  var answer = 0;
  people = people.sort((a, b) => b - a);

  for (var i = 0, j = people.length - 1; i <= j; i++, answer++)
    if (people[i] + people[j] <= limit) j--;

  return answer;
}

// 3 : 프로그래머스 패터슨님
function solution(people, limit) {
  let biggest = 0,
    count = 0,
    i = 0;
  people.sort((a, b) => a - b);
  while (people.length > 0) {
    biggest = people.pop();
    i = 0;
    while (people[i] <= limit - biggest) i++;
    if (i) people.splice(i - 1, 1);
    count++;
  }
  return count;
}

// 4 : 효율성 통과 X
function solution(pp, limit) {
  pp.sort()
  let count = 0
  while (pp.length) {
    if (pp[0] + pp[pp.length - 1] > limit) {
      pp.pop()
    } else {
      pp.pop()
      pp.shift()
    }
    count++
  }
  return count
}

👨🏻‍💻💭 Self Feedback

엘리베이터 예시가 생각났다.
엘리베이터를 효율적으로 만드는 코드가 아니라, 거울을 하나 둬서 문제 인식 자체를 바꿔버리는.
조합을 통해서 모든 경우를 구할 것이 아니라, sort와 for문을 이용해서 간단하게 만들어버릴 수 있었다.

(최대한 limit에 가까운 수를 찾기 위해서 조합을 이용하려 했으나,
가장 무거운 사람 + 가장 가벼운 사람의 조합이 최적의 조합이었음)


  • 2021.08.10 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글