[문제]
자연수 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 이하의 자연수 입니다.
[내 풀이]
import java.util.*;
class Solution {
public int solution(int n) {
int answer = n+1;
int cnt=0 , cnt2 = 0;
String bi1 =Integer.toBinaryString(n);
cnt = bi1.length() - bi1.replace("1","").length();
while(answer<=1000000){
String bi2 =Integer.toBinaryString(answer);
cnt2 = bi2.length() - bi2.replace("1","").length();
if(cnt == cnt2){
return answer;
}
else answer++;
}
return answer;
}
}
[접근]
그저 1의 갯수를 일일이 구하고 비교하는 코드이다.
풀고나서 다른분들과 비교해보니 좋지못한 코드임이 확 느껴졌다.
단순히 2진수로 변환후 일일이 1의 갯수를 구해주었지만 Integer.bitCount() 메소드의 존재를 알고나니 코드가 많이 짧아졌다.
import java.util.*;
class Solution {
public int solution(int n) {
int answer = n+1;
int cnt=Integer.bitCount(n);
while(answer<=1000000){
int cnt2 = Integer.bitCount(answer);
if(cnt == cnt2) return answer;
else answer++;
}
return answer;
}
}
처음 푼 코드는 지저분했지만 그래도 bitCount()라는 좋은 메소드를 발견했으니 도움이된 문제이다!
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[JAVA , Lv.2] 영어 끝말잇기 (0) | 2023.02.03 |
---|---|
[JAVA , Lv.2] 짝지어 제거하기 (0) | 2023.01.19 |
[JAVA , Lv2] 피보나치 수 (0) | 2023.01.19 |
[JAVA , Lv2] 숫자의 표현 (0) | 2023.01.19 |
[JAVA , Lv2] 이진 변환 반복하기 (0) | 2023.01.19 |