프로그래머스 181880 1로 만들기 JAVA

sundays·2023년 5월 25일
0

문제

1로 만들기

풀이

내 풀이

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;
			} else {
				num_list[i] -= 1;
				num_list[i] /= 2;
			}
			answer++;                
		}
	}
	return answer;
}

다른 분들 코드를 좀 보니까 if-else문을 없에도 된다. 왜냐면 어짜피 몫만 가지고 계산할거고 이미 int형이라 몫만 가져갈것이기 때문이다. 그래서 다음과 같이 수정할 수도있다

...
for (int i = 0; i < num_list.length; i++) {
	while(num_list[i] != 1) {
    	num_list[i] /= 2;
    	answer++;
    }
}
....

그리고 이 문제에서 stream 고수님의 소스를 훑어봤는데

  • toBinaryString() - 10진수를 2진수로 변경해주는 java api
return Arrays.stream(num_list)
		.map(x -> Integer.toBinaryString(x).length() - 1)
        .sum();

2진수로 변경한 값의 자리수를 가지고 연산횟수를 알수 있다는 놀라운사실 !_!

전체 코드

전체 코드

profile
develop life

0개의 댓글

관련 채용 정보