1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class Solution {
static int oneCnt = 0;
public static void setLength(int num) {
while (num != 0) {
// 1 갯수 카운트
if (num % 2 != 0)
oneCnt++;
num /= 2;
}
}
public static boolean getNext(int num) {
boolean flag = false;
int cnt = 0;
while (num != 0) {
// 1 갯수 카운트
if (num % 2 != 0)
cnt++;
if (cnt > oneCnt)
return flag;
num /= 2;
}
if (oneCnt == cnt)
flag = true;
return flag;
}
public int solution(int n) {
int answer = 0;
setLength(n++);
while (!getNext(n++));
answer = n - 1;
return answer;
}
}
|
cs |
1의 갯수가 초과될 때 바로 종료하도록 설정하지 않으면 효율성에서 걸리게 된다.
또한 이진수 1의 개수를 구하는 함수로 Integer.bitCount 가 있으니 기억하자.
시간 초과가 났던 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.util.*;
public class test {
// 진수 변환기
public static int gesetLength(int num) {
StringBuilder sb = new StringBuilder();
while (num != 0) {
sb.append(num % 2);
num /= 2;
}
return sb.reverse().toString().replaceAll("0", "").length();
}
public static void main(String[] args) {
int n = 78;
int answer = 0;
int len = Integer.toBinaryString(n++).replaceAll("0", "").length();
while (len != Integer.toBinaryString(n++).replaceAll("0", "").length());
answer = n - 1;
System.out.println(answer);
}
}
|
cs |
전체를 모두 구한 다음에 비교를 하게 되면 시간 초과가 된다.
'Programmers > Level2' 카테고리의 다른 글
방문 길이 (0) | 2021.08.02 |
---|---|
최솟값 만들기 (0) | 2021.08.02 |
[3차] n진수 게임 (0) | 2021.07.31 |
최댓값과 최솟값 (0) | 2021.07.31 |
이진 변환 반복하기 (0) | 2021.07.31 |