반응형
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로 되기에 가능한 문제다.

 

 

 

반응형

+ Recent posts