반응형
13. 구명보트
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
int first = 0;
int last = people.length - 1;
Arrays.sort(people);
while(last >= first){
if(people[first] + people[last] <= limit){
first++;
}
last--;
answer++;
}
return answer;
}
}
<작성한 코드>
가장 가벼운 사람의 인덱스로 사용할 first와 가장 무거운 사람을 태울 인덱스로 사용할 last를 만들어줬다. 그 뒤 Arrays.sort를 사용해서 people을 오름차순으로 정렬해 줬다. 그 뒤 while문을 사용해서 last가 first보다 크거나 같을 때 반복하도록 했다. 내부에서는 if문을 사용해서 people의 first, last번째있는 값을 더해서 limit보다 작거나 같으면 태울 수 있으니 first를 1 증가시키고, 아니라면 last만 1을 빼주고 answer에는 보트하나를 더해준다. 이런 식으로 하게 되면 큰사람은 계속 탈 수 있고, 제일 작은 사람과 큰사람을 비교해 가며 두 명이 함께 탈 수 있을 때는 first +1, last -1이 동시에 이루어져 모든 사람을 태우면서 가장 조금 필요한 보트의 수를 구할 수 있을 것이다.
14. 예상 대진표
class Solution
{
public int solution(int n, int a, int b)
{
int answer = 0;
while(a != b){
a = (a + 1) / 2;
b = (b + 1) / 2;
answer++;
}
return answer;
}
}
<작성한 코드>
while문을 사용해서 a와 b가 같지 않으면 실행하도록 했다. a, b 각각 1을 더하고 2로 나눠줬다. 그 뒤 answer을 1 추가한다. 이렇게 해주면 홀수번호는 짝수로 변할 거고 짝수번호는 그대로 짝수로 나뉘게 된다. 이 값이 같아지면 만난다는 뜻이므로 answer을 카운트한 만큼이 답이 된다. n/2로 되기에 가능한 문제다.
반응형
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
남건욱's 공부기록