풀이
투 포인터를 이용하여 풀었다.
- 몸무게배열을 정렬한다.
- 현재 가장 가벼운 사람 + 가장 무거운 사람 <= limit 이면 보트를 하나 추가한다. (그리고 가장 가벼운사람을 가리키는 포인터++, 무거운 사람을 가리키는 포인터--)
- 만약 limit을 초과하면, 무거운 사람만 태우고 보트를 하나 추가한다. (그리고 무거운 사람을 가리키는 포인터--)
- 만약 두 포인터가 같은 위치면, 한 사람만 남은 것이므로 보트를 하나 추가하고 break
- 만약 두 포인터의 위치가 엇갈리면, 직전에 양 쪽사람을 함께 태우며 더이상 남은 사람이 없는 것이므로 break
import java.util.*; class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); int p1 = 0; int p2= people.length-1; //p1+p2<=limit이면 p1++ p2--,answer++ //p1+p2>limit면 p1++, answer++ //if(p1==p2), answer++, break //if(p1>p2), break while(true){ if(p1 == p2){ answer++; break; }else if(p1>p2){ break; } if(people[p1] + people[p2] <= limit){ answer++; p1++; p2--; }else{ answer++; p2--; } } return answer; } }* 주의할 점은 한 보트에 두 명씩 태운다는 것이다. 인원수 제한이 없는 줄 알고 풀이를 엄청 고민했는데, 알고보니 2명씩이어서 바로 쉽게 풀어버렸다.