
내가 생각했을때 문제에서 원하는부분
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 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);
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.