코딩 테스트/Level 2
28. 구명보트
컴닥
2020. 8. 12. 10:58
반응형
https://programmers.co.kr/learn/courses/30/lessons/42885
구명보트
탐욕법(Greedy)
3171명 완료
이 정도 스포는 해도 될 것 같아서..
[40,50,60,70,80,90,100,110,120,130], 170 은 5회다.
코딩테스트 연습 - 구명보트
무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5
programmers.co.kr
파이썬
deque는 double linked list이다.
from collections import deque
def solution(people: list, limit):
people.sort()
que = deque(people)
answer = 0
while que:
if len(que) == 1:
answer += 1
break
if que.pop() + que[0] <= limit:
que.popleft()
answer += 1
return answer
테스트 1 〉 통과 (9.54ms, 10.7MB)
테스트 2 〉 통과 (11.03ms, 10.8MB)
테스트 3 〉 통과 (10.16ms, 10.7MB)
테스트 4 〉 통과 (11.50ms, 10.8MB)
테스트 5 〉 통과 (10.82ms, 10.6MB)
투 포인터라는 기법이다.
자료를 지우는 시간을 절약할 수 있어 더 빠르다.
def solution(people, limit):
people.sort()
answer, left, right = 0, 0, len(people) - 1
while left <= right:
if people[left] + people[right] <= limit:
left += 1
right -= 1
answer += 1
return answer
테스트 1 〉 통과 (8.56ms, 10.5MB)
테스트 2 〉 통과 (9.60ms, 10.5MB)
테스트 3 〉 통과 (8.33ms, 10.5MB)
테스트 4 〉 통과 (8.72ms, 10.6MB)
테스트 5 〉 통과 (8.53ms, 10.5MB)
Java
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
Arrays.sort(people);
var answer = 0;
var left = 0;
var right = people.length - 1;
while (left <= right) {
if (people[left] + people[right] <= limit) {
left++;
}
right--;
answer++;
}
return answer;
}
}
https://www.youtube.com/watch?v=rI8NRQsAS_s
반응형