티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42885
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
int boat=0;
Arrays.sort(people); //오름차순으로 정렬
int q=limit;
int start=0; //최소값부터 시작하는 포인터
int end=people.length-1; //최대값부터 시작하는 포인터
while (start<end){ //두 포인터가 겹치지 않을 때까지
if (people[start]+people[end]<=limit){ //최소 포인터, 최대 포인터의 합이 limit 넘지 않으면
boat++; //보트 수 증가
start+=1; //최소 포인터 오른쪽으로 1 이동
end-=1; //최대 포인터 왼쪽으로 1 이동
}
else{ //두 합이 limit 넘으면
end-=1; //최대 포인터 왼쪽으로 이동시켜주기
}
}
return boat+(people.length-boat*2); //보트 수+남은 사람들의 합
}
}
정렬해서 최대값, 최소값들을 각각 채우는 방식이다.
두 개의 포인터를 이동시켜주는게 포인트다.
여기서 답을 구할 때 answer++을 매번 증가시켜도 된다.
limit을 초과하는 경우 한명만 타게 되므로 이때도 구명보트 개수 하나 추가된다.
또 start==end 가 될때는 한명이 마저 남은 경우이므로, answer+1 을 해줘야 한다.
'Problem Solving' 카테고리의 다른 글
[BOJ 15683] 감시 (Java) (0) | 2022.02.19 |
---|---|
[프로그래머스] 큰 수 만들기 (Java) (0) | 2022.02.19 |
[BOJ 14556] Balance (Java) (0) | 2022.02.18 |
[프로그래머스] 자물쇠와 열쇠 (Java) (0) | 2022.02.17 |
[BOJ 16637] 괄호 추가하기 (Java) (0) | 2022.02.17 |