구명보트_복습

하이솝·2026년 7월 17일

2026.07.17

문제 풀이

1차 실행 오류


25.9/100

실패 및 시간 초과


실패 원인 분석

if (people[front] == limit) {
	boat++;
	break;
}

해당 부분에서 break 하는 바람에 for문 자체가 끝나게 됨


import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int boat = 0;       
        Arrays.sort(people); // 오름차순 정렬
        
        for (int front = 0; front < people.length; front++) {
            if (people[front] == -1) {
                continue;
            }
            if (people[front] == limit) {
                boat++;
                break;
            }
            
            int back = people.length - 1;
            while(true) {
                if (front == back) {
                    people[front] = -1;
                    boat++;
                    break;
                }
                if (people[front] + people[back] <= limit && people[back] != -1) {
                    people[front] = -1;
                    people[back] = -1;
                    boat++;
                    break;
                }
                back--;
            }
        }
        return boat;
    }
}

2차 실행 오류


81.5/100

시간 초과


시간 초과 원인 분석

매 반복마다 back = people.length - 1로 초기화 하고 있어서
투 포인터가 구현이 제대로 되지 않고 있음

오름차순으로 정렬 후에 뒤에서부터 탐색 하고 있으므로
매 반복마다 back을 초기화 할 필요가 없음


import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int boat = 0;       
        Arrays.sort(people); // 오름차순 정렬
        
        for (int front = 0; front < people.length; front++) {
            if (people[front] == -1) {
                continue;
            }
            if (people[front] == limit) {
                boat++;
                continue;
            }
            
            int back = people.length - 1;
            while(true) {
                if (front >= back) {
                    people[front] = -1;
                    boat++;
                    break;
                }
                if (people[front] + people[back] <= limit && people[back] != -1) {
                    people[front] = -1;
                    people[back] = -1;
                    boat++;
                    break;
                }
                back--;
            }
        }
        return boat;
    }
}

나의 코드


소요 시간

1시간


시간 복잡도

O(nlogn)O(n log n)


import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int boat = 0;
        int back = people.length - 1;
        Arrays.sort(people); // 오름차순 정렬
        
        for (int front = 0; front < people.length; front++) {
            if (people[front] == -1) {
                continue;
            }
            if (people[front] == limit) {
                boat++;
                continue;
            }
            while(true) {
                if (front >= back) {
                    people[front] = -1;
                    boat += ;
                    break;
                }
                if (people[front] + people[back] <= limit && people[back] != -1) {
                    people[front] = -1;
                    people[back] = -1;
                    boat++;
                    break;
                }
                back--;
            }
        }
        return boat;
    }
}

AI 코드


코드 분석

가장 무거운 사람은 매번 보트에 태우면서,
남아 있는 사람 중 함께 탈 수 있는 사람이 있는 경우 같이 태움


시간 복잡도

O(nlogn)O(n log n)


import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        Arrays.sort(people);

        int boat = 0;
        int front = 0;
        int back = people.length - 1;

        while (front <= back) {
            if (people[front] + people[back] <= limit) {
                front++; // 가장 가벼운 사람도 같이 태움
            }
            back--;      // 가장 무거운 사람은 항상 이번 보트에 태움
            boat++;
        }

        return boat;
    }
}

문제 풀이 후기

continue 대신 break를 사용하는 어이 없는 실수를 했다.

그 뒤에는 back을 매 반복마다 초기화 해놓고
투 포인터를 사용하고 있는 줄 알고 착각했다.

위의 사소한 두 문제를 해결하지 못하고 1차 실행 오류에서
AI를 사용해 원인 분석을 하였다.

조금만 생각해보면 충분히 혼자 풀 수 있는 난이도였던 데다가
완성된 코드 또한 배열을 만들고, -1을 삽입하는 등의 필요 없는 부분에 대한
개선점이 너무 뚜렷하게 보인다.

0개의 댓글