Integer.toBinaryString을 사용해 1의 개수를 구해놓고 n++을 하면서 1의 개수가 같은 수를 구하는 방법을 사용했습니다!
class Solution {
public int solution(int n) {
int answer = 0, cnt = 0, binN = n + 1, binCnt = 0;
String strN[] = Integer.toBinaryString(n).split("");
for(String str : strN) if(str.equals("1")) cnt++;
while(true){
binCnt = 0;
String strBin[] = Integer.toBinaryString(binN).split("");
for(String str : strBin) if(str.equals("1")) binCnt++;
if(cnt == binCnt) {
answer = binN; break;
}
binN++;
}
return answer;
}
}
strN 배열에 n을 2진수로 변환한 값을 넣고 str이 1이면 cnt++을 해 1의 개수를 구했습니다!
그리고 binN을 2진수로 변환하고 1의 개수를 구해 cnt와 binCnt의 값을 비교해 같으면 answer에 값이 들어가게 했습니다!
결과는~??
성공인 줄 알았으나..
효율성이 떨어지는.... 이슈가 생겼습니다..
어찌할꼬.. 고민하던 중! bitCount라는 멋진 메서드를 발견했습니다!!!
bitCount는 2진수의 1의 개수를 구해주는 이 코딩테스트에서 만능인 메서드입니다!!! 이걸 사용해 코드를 짜봤습니다!
class Solution {
public int solution(int n) {
int answer = 0, bin = n, binCnt = 0;
int cnt = Integer.bitCount(n);
while(binCnt != cnt){
bin++;
binCnt = Integer.bitCount(bin);
}
return answer = bin;
}
}
cnt에 n의 2진수의 1의 개수를 구해주고, while문을 돌려 binCnt에 bin의 2진수의 1의 개수를 구해줬습니다!!
이렇게 했더니!
정확성 테스트 통과!
효율성 테스트 통과!!!!!
정답입니다!!!
자바에는 좋은 메서드가 정말 많아요.. 그걸 다 알 수는 없지만 요렇게 하나하나 알아가는 재미가 있지 않습니까~~~
그럼 20000~~~~ O(∩_∩)O
'코딩테스트' 카테고리의 다른 글
코딩테스트 - 없는 숫자 더하기 (2) | 2024.03.06 |
---|---|
프로그래머스 - 푸드 파이트 대회 (1) | 2024.03.05 |
프로그래머스 - 소인수분해 (0) | 2023.12.30 |
프로그래머스 - 배열의 길이를 2의 거듭제곱으로 만들기 (1) | 2023.12.21 |
프로그래머스 - 2의 영역 (1) | 2023.12.21 |