코딩 테스트/프로그래머스
[Level2] 다음 큰 숫자
갓생사는 김초원의 개발 블로그
2020. 10. 10. 23:49
[문제 설명]
https://programmers.co.kr/learn/courses/30/lessons/12911
코딩테스트 연습 - 다음 큰 숫자
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니
programmers.co.kr
[풀이 과정]
JAVA의 Integer 클래스에는 이진수 관련 메소드들을 제공한다.
1. Integer.toBinaryString( int );
- 10진수 -> 2진수로 변환하고 싶을 때 사용한다.
public class Test12 {
public static void main(String[] args) {
int n = 78;
String binary = Integer.toBinaryString(n);
System.out.println(binary);
}
}
// 1001110
2. Integer.bitCount( int );
- 10진수 숫자를 2진수로 변환했을 때 1bit의 개수를 반환한다.
public static void main(String[] args) {
int n = 78;
String binary = Integer.toBinaryString(n);
System.out.println(binary);
int one_count = Integer.bitCount(n);
System.out.println(one_count);
}
// 1001110
4
위 메소드들의 존재를 몰랐을 때는 10진수 -> 2진수 변환 메소드와 1비트 개수를 세는 로직도 직접 구현했다.
그렇게 하니 정확도 검사는 모두 맞았지만 효율성 검사를 통과하지 못했다.
위 메소드를 사용하니 효율성 검사도 모두 통과.
[JAVA 코드]
package com.algorithm.level2;
public class Test16 {
public static void main(String[] args) {
int n = 78;
System.out.println(solution(n));
}
public static int solution(int n) {
// 숫자 n을 이진수로 변환했을 때 1의 개수
int one_count = Integer.bitCount(n);
int answer_count = 0;
while (one_count != answer_count) {
// n보다 큰 숫자들을 하나씩 순회
n++;
answer_count = Integer.bitCount(n);
}
return n;
}
}