2026.07.17
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;
}
}
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시간
시간 복잡도
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;
}
}
코드 분석
가장 무거운 사람은 매번 보트에 태우면서,
남아 있는 사람 중 함께 탈 수 있는 사람이 있는 경우 같이 태움
시간 복잡도
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을 삽입하는 등의 필요 없는 부분에 대한
개선점이 너무 뚜렷하게 보인다.