728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42885
풀이
배열에서 인덱스와 포문의 범위를 잘 설정해서 풀면 됨
예제 1번의 배열을 sort하면 이렇게 된다.
for문을 시작할 때 인덱스와 for문의 i의 위치를 그림으로 나타내면 위의 그림처럼 나타난다.
가장 가벼운 사람과 가장 무거운 사람을 보트에 태워보고 가능하면 인덱스를 한칸 오른쪽으로, i를 한칸 왼쪽으로 이동하고 answer를 1 증가시켜준다.
무거워서 불가능하다면 인덱스는 가만히 냅두고 i만 왼쪽으로 한칸 이동시키고 answer를 1 증가시켜 준다.
코드
// 코딩테스트 연습 - 탐욕법 - 구명보트
// https://programmers.co.kr/learn/courses/30/lessons/42885
package PROGRAMMERS.level2;
import java.util.Arrays;
public class Num42885_구명보트 {
private static class Solution {
private int solution(int[] people, int limit) {
Arrays.sort(people);
System.out.println(Arrays.toString(people));
int index = 0;
int answer = 0;
for (int i = people.length - 1; i >= index; i--) {
if (people[index] + people[i] > limit) {
answer++;
} else {
answer++;
index++;
}
}
return answer;
}
public static void main(String[] args) {
Num42885_구명보트.Solution sol = new Num42885_구명보트.Solution();
System.out.println(sol.solution(new int[]{70, 50, 80, 50}, 100));
System.out.println(sol.solution(new int[]{70, 80, 50}, 100));
}
}
}
728x90