프로그래머스 - 구명보트

이서현·2021년 6월 19일
0

Algorithm

목록 보기
43/76

06.19에 푼 문제입니다🌷
구명보트

  • 처음에 푼 풀이법이다.
    while안에 for를 써서 효율성이 모두 시간초과가 났다!
function solution(people, limit) {
    var answer = 0;
    people.sort((a,b)=>a-b)
    while(people.length!==0){
        let p = people.shift()
        let i = people.length-1
        for(;p+people[i]>limit;i--){}
        if(i!==-1)
            people=[...people.slice(0,i),...people.slice(i+1)]
        answer++
    }
    return answer;
}
  • 두번째 푼 풀이법이다.
    양끝의 최소와 최대를 비교해서 두개가 limit 안에 들면 같이 태우고
    아니면 최소는 남기고 최대만 태워서 보낸다.
function solution(people, limit) {
    var answer = 0;
    people.sort((a,b)=>a-b)
    let min = people.shift()
    let max = people.pop()
    answer++
    while(people.length!==0){
        if(min+max<=limit){
            min = people.shift()
            max = people.pop()
        }
        else{
            max = people.pop()
        }
        answer++
    }
    if(min+max>limit) answer++
    return answer;
}
profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글