프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 2 (13~14번 문제풀이) / Level 0 (224/224) / Level 1 (77/77)

남건욱 2023. 12. 24. 14:29

목차

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

     

     

     

    반응형
    프로필사진

    남건욱's 공부기록