<Algorithm> 169. 구명보트(Programmers)
by BFine반응형
1. 구명보트(Programmers)
사용 알고리즘 : 그리디
-
처음에 풀때는 visited를 이용하여 모든 경우를 확인 했더니 시간초과가 발생했다.
곰곰히 생각해보면 visited 필요없이 point를 계속 이동 시켜주면 되는 문제였다.
쉬운문제일수록 효율성에 대해서 생각을 많이 해봐야 겠다.
문제에 대한 접근&생각
- 사람들은 각각 무게가 있고 순서없이 존재한다 -> 정렬!
- 구명보트는 최대 2명 탈 수 있고 제한 무게가 있다 -> 작은 몸무게 + 큰 몸무게를 최선의 선택 -> 그리디
내 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Solution { public static void main(String[] args) { System.out.println(solution(new int[] {50,50,50,50,50},60)); } public static int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); /****************************** * 정렬된 사람 무게를 탐색하여 앞 뒤의 포인터를 * 두고 구명보트에 탈 수 있을때까지 포인터를 * 옮겨주는 방식으로 구명보트 수를 구한다. *******************************/ List<Integer> plist = Arrays.stream(people).boxed().collect(Collectors.toList()); int front = 0; int end = plist.size()-1; int boat = plist.size(); while (front <= end) { while (plist.get(front) + plist.get(end) > limit && end > 0) end--; if(front>=end)break; boat--; front++; end--; } return boat; /*boolean[] visited = new boolean[people.length]; int boat = people.length; for(int i = 0; i < people.length; i++) { int pivot = people[i]; if(visited[i]) continue; for(int j = people.length-1; j > i; j--) { int with = people[j]; if(pivot+with <= limit && !visited[j]) { visited[i] = true; visited[j] = true; boat--; break; } } }*/ } } | cs |
얻은 것
Array.asList는 같은 자료형만 가능하다. 기본형 < - x -> 참조형
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 171. 기지국설치(Programmers) (0) | 2019.04.19 |
---|---|
<Algorithm> 170. 단속카메라(Programmers) (0) | 2019.04.18 |
<Algorithm> 168. 큰수만들기(Programmers) (0) | 2019.04.17 |
<Algorithm> 167. 가장 먼 노드(Programmers) (0) | 2019.04.17 |
<Algorithm> 166. 징검다리(Programmers) (0) | 2019.04.16 |
블로그의 정보
57개월 BackEnd
BFine