반응형
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/42885
풀이코드
package com.algorithm._01_그리디_구현;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class P42885_구명보트 {
public static void main(String[] args) {
// write your code here
P42885_구명보트 main = new P42885_구명보트();
//System.out.println(main.solution(new int[]{70, 50, 80, 50}, 100));
//System.out.println(main.solution(new int[]{70, 80, 50}, 100));
//System.out.println(main.solution(new int[]{130, 80, 50, 30}, 100));
//System.out.println(main.solution(new int[]{160, 150, 140, 60, 50, 40}, 200));
System.out.println(main.solution(new int[]{200, 170, 150, 50, 40, 20}, 100));
}
public int solution(int[] people, int limit) {
int answer = 0;
// 오름차순 정렬
Arrays.sort(people);
// 거꾸로간다.
int start = people.length - 1; // 시작원소
int end = 0; // 마지막원소
while (end <= start) {
/** 맨 앞의 사람이 보트 제한 무게의 절반 이하가 되면, 무조건 맨 뒤의 사람과 같이 보낼 수 있다.
절반의 값이 limit 보다 작거나 같으면, 그 다음부터는 해당 원소보다 무조건 작기 때문이다. */
if (people[start] <= limit / 2) {
int target = (start - end + 1);
answer += (target / 2) + (target % 2); // 몫 + 나머지
return answer;
}
int sum = people[start] + people[end];
if (sum > limit) {
answer++; // start 원소 1개로 개수 +1
start--; // 앞부분 + 1
} else {
// cursor 이동
start--;
end++;
answer++;
}
}
return answer;
}
}
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[Baekjoon 7576번] 토마토 문제 (with 자바) (0) | 2022.03.31 |
---|---|
[프로그래머스] Level2 42578번: 위장 (JAVA) (0) | 2022.03.27 |
[프로그래머스] Level1 77484번: 로또의 최고 순위와 최저 순위 (JAVA) (0) | 2022.03.21 |
[Baekjoon 1238번] 파티 문제 (with 자바) (0) | 2022.03.15 |
[Baekjoon 1439번] 뒤집기 문제 (with 자바) (0) | 2022.02.05 |