프로그래머스 1로 만들기

KIMYEONGJUN·2026년 6월 28일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다.
예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

내가 이 문제를 보고 생각해본 부분

solution 메서드는 정수 배열 num_list를 입력받아, 각 원소가 1이 될 때까지 필요한 나누기 연산의 총횟수를 계산한다.
answer 변수는 누적된 나누기 연산 횟수를 저장하는 변수이다.
for문을 통해 배열 내 각 숫자를 하나씩 가져온다.
각 숫자에 대해 while문을 돌면서 숫자가 1이 될 때까지 다음과 같이 처리한다.
숫자가 짝수이면, 2로 나눈다.
숫자가 홀수이면, 1을 빼서 짝수로 만든 뒤 2로 나눈다.
이런 나누기 한 번마다 answer를 1씩 증가시킨다.
모든 배열 원소에 대해 같은 과정을 반복한 후, 최종적으로 누적된 answer 값을 반환한다.
main 메서드는 이 solution 함수를 테스트하기 위해 예시 배열 {12, 4, 15, 1, 14}를 넣고 결과를 출력한다.

코드로 구현

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        for (int num : num_list) {
            while (num != 1) {
                if (num % 2 == 0) {
                    num /= 2;
                } else {        
                    num = (num - 1) / 2;
                }
                answer++;
            }
        }
        return answer;
    }
}

프로그래머스 코드

package programmers;

// 프로그래머스 1로 만들기
public class Main65 {
    public static int solution(int[] num_list) {
        int answer = 0;
        for (int num : num_list) {
            while (num != 1) {
                if (num % 2 == 0) {
                    num /= 2;
                } else {
                    num = (num - 1) / 2;
                }
                answer++;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        int[] testInput = {12, 4, 15, 1, 14};  // 예제 입력
        int result = solution(testInput);
        System.out.println(result);
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글