[Programmers / Level2] 42885. 구명보트(Java)

이하얀·2024년 6월 25일
0

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 인원수와 무게 제한이 있는 구명보트를 통해 모든 사람을 구조해야 하는데, 이떄 필요한 구명보트 개수의 최솟값 구하기


알고리즘


풀이 시간 : 35분
0. people 정렬하기 + 가장 가벼운 사람 lightest 선언하기
1. for문

  • i가 people.length-1부터 시작해야 함.(정렬 후에 가장 마지막 요소가 n-1이기 때문)
  • 또한, 역순으로 파악하기 위해 가장 가벼운 사람 lightest보다 i가 크거나 같은 경우, i--를 통해 구해야 함.
    • 2명의 무게 합이 limit 이하인 경우 -> lightest++ 계속 증가
  1. for문으로 빠져나와 최종 최소값인 answer에 증가해주기 -> 정답
/*알고리즘
0. people 정렬하기 + 가장 가벼운 사람 lightest 선언하기
1. for문
- i가 people.length-1부터 시작해야 함.(정렬 후에 가장 마지막 요소가 n-1이기 때문)
- 또한, 역순으로 파악하기 위해 가장 가벼운 사람 lightest보다 i가 크거나 같은 경우, i--를 통해 구해야 함.
  - 2명의 무게 합이 limit 이하인 경우 -> lightest++ 계속 증가
2. for문으로 빠져나와 최종 최소값인 answer에 증가해주기 -> 정답
*/

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        
        int lightest = 0; // 가장 가벼운 사람 선언
        
        Arrays.sort(people);
        
        for(int i=people.length-1; i >= lightest; i--){
            if(people[lightest] + people[i] <= limit) lightest++;
        }
        answer++;
        
        return answer;
    }
}


오답체크


  • answer++을 해주는 위치가 잘못되어, 테스트케이스를 통과하지 못함 -> for문 안쪽으로 넣어 해결
//before
for(int i=people.length-1; i >= lightest; i--){
	if(people[lightest] + people[i] <= limit) lightest++;
	}
	answer++;
//after
for(int i=people.length-1; i >= lightest; i--){
	if(people[lightest] + people[i] <= limit) {
    	lightest++;
    }
    answer++;
}


최종 풀이


풀이 시간 : 40분(첫 풀이 시간 포함)

  1. people 정렬하기 + 가장 가벼운 사람 lightest 선언하기
  2. for문
  • i가 people.length-1부터 시작해야 함.(정렬 후에 가장 마지막 요소가 n-1이기 때문)
  • 또한, 역순으로 파악하기 위해 가장 가벼운 사람 lightest보다 i가 크거나 같은 경우, i--를 통해 구해야 함.
    • 2명의 무게 합이 limit 이하인 경우 -> lightest++ 계속 증가
  1. for문으로 빠져나와 최종 최소값인 answer에 증가해주기 -> 정답
import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        
        int lightest = 0; // 가장 가벼운 사람 선언
        
        Arrays.sort(people);
        
        for(int i=people.length-1; i >= lightest; i--){
            if(people[lightest] + people[i] <= limit) {
                lightest++;
            }
            answer++;
        }
        
        return answer;
    }
}


결과


profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글