https://school.programmers.co.kr/learn/courses/30/lessons/42885
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return - 주어진 자료는 무엇인가?
- 사람들의 몸무게를 담은 배열 people
- 구명보트의 무게 제한 limit
- 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없다. - 조건은 무엇인가?
- 무인도에 갇힌 사람은 1명 이상 50,000명 이하입니다.
- 각 사람의 몸무게는 40kg 이상 240kg 이하입니다.
- 구명보트의 무게 제한은 40kg 이상 240kg 이하입니다.
- 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출할 수 없는 경우는 없습니다.
2. 계획
- people 배열을 내림차순으로 정렬한다.
- 몸무게가 제일 무거운 사람과 제일 가벼운 사람을 더했을 때 limit를 초과한다면 그다음으로 몸무게가 제일 무거운 사람과 비교하고 count+1해준다.
- 몸무게가 제일 무거운 사람과 제일 가벼운 사람을 더했을 때 limit를 초과하지 않는다면 그다음으로 몸무게가 제일 무거운 사람이랑 그 다음으로 몸무게가 제일 가벼운 사람이랑 비교하고 count+1을 해준다.
- shift()나 pop()을 사용하지 않고 이를 사용한것처럼 인덱스만 옮겨가면서 비교해준것이다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (people, limit) => {
const peopleArr = people.sort((a, b) => b - a);
let start = 0;
let end = peopleArr.length - 1;
let count = 0;
while (start <= end) {
if ((peopleArr[start] + peopleArr[end]) > limit) {
start += 1;
count++;
} else {
start += 1;
end -= 1;
count++;
}
}
return count
}
test('countBoat', () => {
expect(solution([70, 50, 80, 50], 100)).toEqual(3);
expect(solution([70, 80, 50], 100)).toEqual(3);
})
'코테연습' 카테고리의 다른 글
145. 자연수 뒤집어 배열로 만들기 Javascript (0) | 2022.09.18 |
---|---|
144. 자릿수 더하기 Javascript (0) | 2022.09.18 |
140. 짝지어 제거하기 Javascript (0) | 2022.09.15 |
139. N개의 최소공배수 Javascript (0) | 2022.09.15 |
137. 이것이 코딩 테스트다 : 12장 문자열 재정렬 Javascript (0) | 2022.09.15 |
댓글