개인공부-13

박상훈·2023년 6월 28일
0

개인공부

목록 보기
13/16

1. 구명보트

  • 프로그래머스 Level - 2 정답률 68%로 쉬워 보이는 문제
  • 보트에는 최대 2명만 탈 수 있음.
  • 최대 허용 몸무게가 limit으로 주어짐.
  • 사람들의 몸무게를 담은 배열이 new int[]{}주어짐
  • 이 때 가장 최소로 보트를 사용할 수 있는 경우의 수를 구해라

2. 초반 접근

  • 최대 2명인 것도 못보고,, 그냥 sort해서 가벼운 사람부터 꽉꽉 태우면 되겠지.. 생각
  • 최대 2명인 경우 = 가장 가벼운 사람 + 가장 무거운 사람으로 구성하면 최소로 태울 수 있음!!!!!

2-1. 이차접근 실패

  • 위의 사실을 깨닫고 코딩 진행.
  • 하지만 LinkedList형태로 만약 people[firstIndex] + people[lastIndex] <= limit이라면 remove를 했어서 시간 초과 오류와 index문제 발생.
  • 단순하게 생각해서 만약 위의 경우라면 answer ++ 하고 Firstindex ++, LastIndex--를 해주면 그 경우를 제외하고 다시 탐색하게 됨.
  • while(조건) 조건을 한번에 정의하지 못함.
  • 조건은 LastIndex>=FirstIndex여야 함.. 같은 경우까지 포함해야함으로

3. 정답코드

public class Solution14 {

    public static int solution(int[] people, int limit) {

        Arrays.sort(people);
        int answer = 0;
        int index = 0 ;
        int len = people.length-1;

        while(index<=len){
            if(people[index]+people[len]<=limit){
                answer++;
                len--;
                index++;
            }else{
                answer++;
                len --;
            }

        }

        return answer;
    }
  • 정말 간단한 문제였는데 생각하는 힘이 많이 죽었다...
  • 조금만 더 생각하고 문제풀자
profile
기록하는 습관

0개의 댓글