개발자는 기록이 답이다

[프로그래머스][Java][Lv.0] 1로 만들기 본문

알고리즘/프로그래머스

[프로그래머스][Java][Lv.0] 1로 만들기

slow-walker 2023. 8. 29. 23:49

 

https://school.programmers.co.kr/learn/courses/30/lessons/181880

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내가 푼 풀이

1. int배열을 순회하면서 홀수 짝수일 경우 계산해서 count를 증가 시켰다.

2. 첫번째 인덱스값이 1이 되기 전까지 계속 계산한다

 

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;

        for (int i = 0; i < num_list.length; i++) {
            int tmp = num_list[i];
            while (tmp > 1) {
                if (tmp % 2 == 0) {
                    tmp = tmp / 2;
                    answer++;
                } else {
                    tmp = (tmp - 1) / 2;
                    answer++;

                }
            }
        }
        return answer;
    }

}
테스트 1 통과 (0.02ms, 74.8MB)
테스트 2 통과 (0.02ms, 82.8MB)
테스트 3 통과 (0.04ms, 63.6MB)
테스트 4 통과 (0.02ms, 70.2MB)
테스트 5 통과 (0.04ms, 66.4MB)
테스트 6 통과 (0.02ms, 72.7MB)
테스트 7 통과 (0.03ms, 77.2MB)
테스트 8 통과 (0.02ms, 80MB)
테스트 9 통과 (0.03ms, 83MB)
테스트 10 통과 (0.02ms, 74.9MB)
테스트 11 통과 (0.02ms, 83.2MB)
테스트 12 통과 (0.03ms, 75.8MB)
테스트 13 통과 (0.02ms, 75.5MB)
테스트 14 통과 (0.03ms, 65.5MB)
테스트 15 통과 (0.02ms, 83.1MB)
테스트 16 통과 (0.03ms, 64.5MB)
테스트 17 통과 (0.02ms, 76.4MB)
테스트 18 통과 (0.05ms, 84.2MB)
테스트 19 통과 (0.02ms, 73.4MB)

 

다른 사람 풀이 1

1. 변수로 담을 필요없이 while문에 바로 1이 아닐경우까지 반복하도록 세팅한다.

2. int타입이라서 -1을 해줄 필요가 없다, 어차피 나누기의 몫이 변수에 저장되기 때문이다.

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        for(int i = 0;num_list.length>i;i++){
            while(num_list[i]!=1){
                num_list[i]/=2;
                answer++;
            }
        }
        return answer;
    }
}
테스트 1 통과 (0.02ms, 70.5MB)
테스트 2 통과 (0.03ms, 85.7MB)
테스트 3 통과 (0.02ms, 72.7MB)
테스트 4 통과 (0.03ms, 76.1MB)
테스트 5 통과 (0.02ms, 75.9MB)
테스트 6 통과 (0.02ms, 75.1MB)
테스트 7 통과 (0.02ms, 70.1MB)
테스트 8 통과 (0.03ms, 76.6MB)
테스트 9 통과 (0.02ms, 84.7MB)
테스트 10 통과 (0.02ms, 74.3MB)
테스트 11 통과 (0.03ms, 73.6MB)
테스트 12 통과 (0.03ms, 78.1MB)
테스트 13 통과 (0.02ms, 66.2MB)
테스트 14 통과 (0.02ms, 74.1MB)
테스트 15 통과 (0.02ms, 66.8MB)
테스트 16 통과 (0.03ms, 72.7MB)
테스트 17 통과 (0.03ms, 82.2MB)
테스트 18 통과 (0.03ms, 72.6MB)
테스트 19 통과 (0.03ms, 77.7MB)

 

 

다른 사람 풀이 2

1. 제곱을 계산하는 함수인 Math.pow()함수를 활용했다.

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        int a = 0;
        for(int i = 0; i < num_list.length; i++){
            int j = 0;
            while (num_list[i] >= Math.pow(2, j)) {
                a = j;
                j++;
            }
            answer += a;
        }
        return answer;
    }
}
테스트 1 통과 (0.04ms, 75.8MB)
테스트 2 통과 (0.06ms, 78.4MB)
테스트 3 통과 (0.04ms, 74.3MB)
테스트 4 통과 (0.04ms, 77.1MB)
테스트 5 통과 (0.05ms, 75.2MB)
테스트 6 통과 (0.04ms, 74.2MB)
테스트 7 통과 (0.04ms, 78MB)
테스트 8 통과 (0.05ms, 74.1MB)
테스트 9 통과 (0.05ms, 74.8MB)
테스트 10 통과 (0.05ms, 65.1MB)
테스트 11 통과 (0.03ms, 70.5MB)
테스트 12 통과 (0.05ms, 76.7MB)
테스트 13 통과 (0.06ms, 71.5MB)
테스트 14 통과 (0.06ms, 73.6MB)
테스트 15 통과 (0.06ms, 74.2MB)
테스트 16 통과 (0.04ms, 71.6MB)
테스트 17 통과 (0.04ms, 75.1MB)
테스트 18 통과 (0.05ms, 66.4MB)
테스트 19 통과 (0.09ms, 67.2MB)