반응형
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한 사항
- n은 1,000,000 이하의 자연수 입니다.
입출력 예
n result
78 | 83 |
15 | 23 |
입출력 예 설명
입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.
문제 접근
- 문제에서 요구하는 개념은 주어진 숫자에서 이진수를 구할수 있는가와 나열된 숫자중 특정 숫자의 개수를 출력할수 있는가 2가지를 요구하는 문제라고 생각했습니다.
- 자바에서는 Integer클래스에서 제공하는 bitCount 메소드를 이용하여 1의 개수를 구할 수 있습니다.
- oneBitCount 메소드를 선언하여 입력받은 숫자를 bitCount 메소드를 이용하여 1의 개수를 반환 받도록 하였습니다.
- currentBit 변수를 선언하여 입력된 숫자의 1의 개수를 저장하였습니다.
- nextNumber는 입력값보다 큰숫자를 저장하고 solutionBit로 nextNumber를 이진수로 변환 하였을때 1의 개수와 같아질경우가 생길때 까지 while문을 돌렸습니다.
class Solution {
public int solution(int n) {
int currentBit = oneBitCount(n);
int nextNumber = n;
int solutionBit = 0;
while (currentBit != solutionBit) {
nextNumber++;
solutionBit = oneBitCount(nextNumber);
}
return nextNumber;
}
int oneBitCount (int n){
return Integer.bitCount(n);
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 2] 탑 (Stack 문제) (0) | 2019.12.30 |
---|---|
[프로그래머스 level 1] 체육복 (탐욕법) (0) | 2019.11.03 |
[프로그래머스 level 1] 문자열 압축 2020카카오 블라인트 채용 문제 (0) | 2019.10.30 |
[프로그래머스 Level 1] 하샤드의 수 (0) | 2019.10.27 |
[프로그래머스 Level 1] 2016년 (0) | 2019.10.26 |