본문 바로가기
Study Note/Algorithm

프로그래머스 #탐욕법(Greedy) - 구명보트 lv2

by 시뮝 2021. 9. 13.
728x90

문제

 

풀이

function solution(people, limit) {
    let answer = 0; // 구명보트 수
    let startIndex = 0;
    let endIndex = people.length - 1;    
    let saveActivity = true; // 구출 작업 진행 여부
    
    people.sort((a, b) => b - a); // 제일 무거운 사람 순으로 정렬
    
    while (saveActivity) {
        // 마지막 한명을 태우고 구출 작업 종료
        if(startIndex === endIndex) {
            answer++;
            startIndex++;
            saveActivity = false; 
            break;
        }
        
        // 가장 가벼운 사람과 태웠을 때 제한 무게를 넘기지 않으면 2명을 태운다.
        if(people[startIndex] + people[endIndex] <= limit) {
            answer++;
            ++startIndex;
            --endIndex;
        } else {
            answer++;
            ++startIndex;
        }
        
        // 남은 사람 없음. 구출 작업 종료
        if(startIndex > endIndex) {
            saveActivity = false; 
            break;
        }
    }
    
    return answer;
}

 

채점결과

 

풀이후기

shift(), pop() 을 해가며 사람을 구하려고 했다. 그랬더니 정확성은 만점인데 효율성에서 0점 ㅠㅠ 원본 배열을 건드리지 않는 방향으로 인덱스 정보를 따로 선언하고 풀었더니 효율성 테스트를 통과할 수 있었다.

 

이젠 레벨 2 난이도에 익숙해져가고 있다~! 화이팅~!

728x90

댓글