코딩테스트 DAY11

차준우·2022년 12월 21일
0
post-thumbnail

프로그래머스 코딩테스트 입문 - DAY11

😒주사위의 개수

머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.

테스트 케이스

boxnresult
[1, 1, 1]11
[10, 8, 6]312
class Solution {
    public int solution(int[] box, int n) {
        int answer = 0;
        answer = (box[0] / n) * (box[1] / n) * (box[2] / n);
        return answer;
    }
}

가로 세로 높이를 각각 n값으로 나누고, 모두 곱해주면 box의 크기가 나온다.

😒합성수 찾기

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

테스트 케이스

nresult
105
158
class Solution {
    public int solution(int n) {
        int answer = 0;
        if (n < 4) 
            return answer;
        for(int i=4;i<=n;i++) {
            int cnt = 0;
            for (int j=1;j<=i;j++) {
                if(i%j==0) {
                    cnt++;
                }
            }
            if(cnt>2)
                answer++;
        }
        return answer;
    }
}

answer변수가 n이하의 합성수의 개수를 담을 변수이다. 초기화는 0.
합성수이므로 4보다 작은 값일 경우 바로 answer를 리턴한다.
4이상의 값들은 중첩 for문을 돌며, n이하까지 약수의 개수를 구하고, 약수의 개수가 3개 이상인 경우에만 answer를 증가시킨다.
구해진 answer를 최종적으로 리턴한다.

😒최댓값 만들기 (1)

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

numbersresult
[1, 2, 3, 4, 5]20
[0, 31, 24, 10, 1, 9]744
import java.util.Arrays;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        Arrays.sort(numbers); // 오름차순 정렬
        //내림차순의 경우 배열을 integer형으로 변경하고 Collections.reverseOrder()사용
        answer = numbers[numbers.length-1] * numbers[numbers.length-2];
        return answer;
    }
}

numbers배열을 오름차순 정렬하고 가장 큰 값과 두번 째로 큰 값을 곱한다.

😒팩토리얼

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 4 3 2 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

i! ≤ n

테스트 케이스

nresult
362880010
73
import java.math.BigInteger;
class Solution {
    public BigInteger solution(int n) {
        BigInteger answer = BigInteger.valueOf(1);
        BigInteger m = BigInteger.valueOf(n);
        BigInteger i = BigInteger.valueOf(1);
        while(answer.compareTo(m)==-1) {
            i = i.add(BigInteger.valueOf(1));
            answer = answer.multiply(i);
            if(answer.compareTo(m) == 1) 
                i = i.subtract(BigInteger.valueOf(1));
        } 
        return i;
    }
}

팩토리얼의 문제가 나와서 저번과 동일하게 BigInteger를 사용했다.
a.compareTo(b)는 a가 b보다 크면 1, 같으면 0, 작으면 0을 리턴한다.
n까지 반복해야 하므로 answer.compareTo(m)==-1을 사용했다.(m은 주어진 변수 n의 BigInteger형 변수)
i값을 1씩 증가하면서 answer와 곱해준다. (팩토리얼 완성)
여기까지만 코딩을 하면 i! ≤ n인 경우에는 상관 없지만, i! > n의 경우에도 return을 해버리기 때문에,
answer.compareTo(m)==1인 경우에는 i값을 1 줄여주었다.

출처 : https://school.programmers.co.kr/learn/challenges
이미지 출처 : 작가 storyset 출처 Freepik

profile
개애발

0개의 댓글