import java.util.Arrays;
public class Titanic {
public static int solution(int[] nums, int m) {
int answer = 0;
Arrays.sort(nums); // 무게 기준으로 오름차순 정렬
int left = 0; // 가장 가벼운 사람
int right = nums.length - 1; // 가장 무거운 사람
while(left <= right) { // 같아지는 순간도 넣어야함(1명만 남은 경우가 있기 때문에)
if(nums[left] + nums[right] <= m) { // 가장 무거운 사람과 가벼운 사람의 합이 m 이하일 때
answer++; // 보트의 개수 1 증가
left++;
right--;
} else { // m 보다 클 때
answer++; // 보트의 개수 1 증가
right--; // 무거운 사람만 태워보냈으므로
}
}
return answer;
}
public static void main(String[] args) {
System.out.println(Titanic.solution(new int[]{90, 50, 70, 100, 60}, 140));
System.out.println(Titanic.solution(new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90}, 100));
}
}
정렬을 한 다음에 left는 0번째부터 right는 마지막부터 탐색을 해서 가장 가벼운 사람과 가장 무거운 사람의 합이 m 이하인지 확인한다. 이때 m이하이면 같이 타고 나가면 되므로 보트의 개수를 1 증가시킨다. 만약 m 보다 큰 경우 right이 가리키는 한명만 타고나가야 한다 보트의 개수를 1 증가시키고 right 인덱스를 1 감소시킨다. 이렇게 반복하다가 right과 left가 엇갈리는 순간에 멈추고 보트의 개수를 return하면 된다.