728x90
( 연습문제 / 다음 큰 숫자 )
[문제]
문제 설명
자연수 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)입니다.
[풀이]
자연수 n을 toBinaryString()으로 문자열 이진수로 변환합니다. 그다음 replace() 함수를 통해 "0"을 모두 제거 후 length()로 문자열의 길이를 출력하면 해당 값이 1의 개수가 됩니다.
1의 개수를 구했다면 이제 조건에 맞는 숫자를 n에 1씩 더하면서 위의 과정을 반복하면 됩니다.
[코드]
자바
class Solution {
public int solution(int n) {
// n의 2진수에서 1의 개수 구하기
int cnt = Integer.toBinaryString(n).replace("0", "").length();
while(true){
// n을 증가시키면서 처음의 1의 개수와 같으면 반복문 종료
if(Integer.toBinaryString(++n).replace("0", "").length() == cnt) break;
}
return n;
}
}
코틀린
fun solution(n:Int):Int{
// n의 2진수에서 1의 개수 구하기
val cnt = n.toString(2).replace("0", "").length
var num = n
while(true){
// n을 증가시키면서 처음의 1의 개수와 같으면 반복문 종료
if((++num).toString(2).replace("0", "").length == cnt) break
}
return num
}
제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻💻
감사합니다~😄
728x90
'Algorithm > level2' 카테고리의 다른 글
[ 프로그래머스 - Java & Kotlin ] 올바른 괄호 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
---|---|
[ 프로그래머스 - Java & Kotlin ] [ 3차 ] n진수 게임 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
[ 프로그래머스 - Java & Kotlin ] 땅따먹기 ( 자바 & 코틀린 ) (0) | 2021.09.14 |
[ 프로그래머스 - Java & Kotlin ] 숫자의 표현 ( 자바 & 코틀린 ) (2) | 2021.09.14 |
[ 프로그래머스 - Kotlin ] 최댓값과 최솟값 ( 코틀린 ) (0) | 2021.09.13 |