반응형
다음 큰 숫자
문제 설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
예시
n | result |
78 | 83 |
15 | 23 |
코드 해석 및 전체 코드
1.이진수로 변환하는 과정에서 1의 개수를 구하는 메소드 구현
2. while문 반복으로 n보다 큰 수 중에서 1의 개수와 같은 숫자 반환
이 문제의 핵심은 이진수로 변환해서 1을 구하는 과정이다.
binaryOne() 메소드에서 n을 2로 나누었을 때의 나머지가 1이면 반환값에 1을 더한 뒤 n을 2로 나눈다.
그리고 다시 메인에서 n의 1의 개수를 저장하고,
n보다 큰 수에서 1의 개수가 같은지 찾는 while문을 반복한다.
class Solution {
public int solution(int n) {
int answer = 0;
int originOne = binaryOne(n);// n의 이진수 1의 개수
//System.out.println(one);
int num = n + 1; // n보다 1 큰 수
while(true){
int one = binaryOne(num); // n보다 큰 수
if(one == originOne) return num; // n보다 큰 수의 이진 수 1의 개수와 n의 이진수 1의 개수가 같은지 비교
num++; // num + 1
}
}
private int binaryOne(int n){
int ret = 1; // 마지막 나누었을 때 나머지가 1이라 미리 더함
// 1이 아닐 때까지 반복
while(n != 1){
int b = n % 2; // n을 2로 나누었을 때의 나머지 (이진수 구하기)
if(b == 1) ret++; // b가 1일 때 반환값에 1 더함
n /= 2; // 다음 이진수 구하기 위해 2로 나눔
}
return ret;
}
}
반응형
'코딩 테스트 > [JAVA] programmers 코딩 테스트 연습' 카테고리의 다른 글
[Programmers/JAVA] 이진 변환 반복하기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.29 |
---|---|
[Programmers/JAVA] 올바른 괄호 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.27 |
[Programmers/JAVA] 숫자의 표현 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.26 |
[Programmers/JAVA] 최댓값과 최솟값 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.25 |
[Programmers/JAVA] 최솟값 만들기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.24 |
댓글