Lv2. 구명보트 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42885
// 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
}
엘리베이터 예시가 생각났다.
엘리베이터를 효율적으로 만드는 코드가 아니라, 거울을 하나 둬서 문제 인식 자체를 바꿔버리는.
조합을 통해서 모든 경우를 구할 것이 아니라, sort와 for문을 이용해서 간단하게 만들어버릴 수 있었다.(최대한 limit에 가까운 수를 찾기 위해서 조합을 이용하려 했으나,
가장 무거운 사람 + 가장 가벼운 사람의 조합이 최적의 조합이었음)
댓글 환영
질문 환영
by.protect-me