Solution 1) 내 풀이
class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        
        for (int i = 0; i < num_list.length; i++) {
            while (num_list[i] != 1) {
                if (num_list[i] % 2 == 0) {
                    num_list[i] /= 2;
                    answer++;
                } else {
                    num_list[i] = (num_list[i] - 1) / 2;
                    answer++;
                }
            }
        }
        return answer;
    }
}
Solution 2) 다른 사름의 풀이
class Solution {
    public int solution(int[] num_list) {
        int answer = 0;

        for (int num: num_list) {
            while(1 < num) {
                num /= 2;
                answer++;
            }
        }

        return answer;
    }
}
코드 및 문제 리뷰

배열 안의 모든 요소들이 조건에 따라 1이 될 때 까지 반복하고, 각 요소별로 1이 될때 까지 소요된 반복 횟수를 합해 반환하는 문제이다. 

나는 조건이 두개라고 생각했는데 다른 사람의 풀이를 보니 조건을 한개로 끝내는 모습들이 보였다.

조건 중 "홀수인 경우엔 요소에서 1을 뺀 뒤 2로 나눔"이라 돼 있다. 하지만 int형의 계산이라 어차피 그 수가 홀수여도 2로 나눈 나머지는 버려진다. ((5 - 1) / 2)나 (5 / 2)나 결과는 2로 같다.

 

그 결과 조건문을 하나로 코드가 굉장히 간결해졌다. 코딩테스트간 문제의 조건을 꼭 따라야한다고 생각했는데, 이런 숨겨진 의도도 파악해 더욱 간결하고 좋은 코드를 작성할 수 있게 해야겠다.

+ Recent posts