문제정리
구명보트는 최대 2명씩 (그러면 한명도 탈 수 있음), 무게 제한은 100kg
모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return
처음 작성한 코드
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
Arrays.sort(people);
int a = 0;
int b = people.length - 1;
while(a < b){
int sum = people[a] + people[b];
if(limit >= sum){
answer++;
b--;
a++;
}else{
answer++;
b--;
}
}
return answer;
}
}
위와 같이 했는데 else에도 answer++;를 적용한 이유는 b-- 라는 부분 큰 수 값도 더하고 그 총 값을 return 했는데 근데 이제 문제는 people[0]이 만약 다른 값과 더했을 때 limit값을 넘어가서 혼자남아있게 되면 이 값은 포함되지 않는다는것..
최종 코드
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
Arrays.sort(people);
int a = 0;
int b = people.length - 1;
while(a < b){
int sum = people[a] + people[b];
if(limit >= sum){
answer++;
b--;
a++;
}else{
b--;
}
}
return people.length - answer;
}
}
쉽게 생각해서..sum 값이 limit보다 작거나 같을때 answer 값을 하나씩 올리고, 그 값을 전체 인원수에서 빼기만 하면 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 구할 수 있잖아..?
한번 막혀가지고.. Array.list도 사용해보고 이것저것 해보느라
시간은 1시간.. 넘게걸림...;;;
(변수명도 좀 생각하면서 해야할까..?)
'코딩테스트' 카테고리의 다른 글
프로그래머스(JAVA) - level2(피보나치 수) (1) | 2025.01.25 |
---|---|
프로그래머스(JAVA) - level2(이진 변환 반복하기) (1) | 2025.01.21 |
프로그래머스(JAVA) - level2(카펫) (1) | 2025.01.18 |
프로그래머스(JAVA) - level2(숫자의 표현) (0) | 2025.01.13 |
프로그래머스(JAVA) - level2(JadenCase 문자열 만들기 ) (0) | 2025.01.12 |