코딜러티 문제(binary gap)

코딜러티 문제(binary gap)

코딜러티 문제를 풀어 봤는데요 전 자바 버전으로 풀었습니다.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

package com.github.sejoung.codetest.test.binarygap;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class Solution {
public int solution(int N) {
// write your code in Java SE 8
int result = 0;
// 먼저 2진수로 변환
String binary = Integer.toBinaryString(N);
// 첫번째 1 위치
int firstOneIdx = 0;
// 다음 1 위치
int nextOneIdx = 0;

// 전체 loop는 2진수 길이가 최대
for (int i = 0; i <= binary.length(); i++) {

// 첫번째만 인덱스 체크
if (i == 0) {
firstOneIdx = binary.indexOf("1");
}

// 첫번째 인덱스 다음 1 찾기
nextOneIdx = binary.indexOf("1", firstOneIdx + 1);

// 다음 1이 없으면 loop 나옴
if (nextOneIdx == -1) {
break;
}

// 갭
int temp = nextOneIdx - firstOneIdx - 1;

// 현제 갭이 이전보다 크면 결과 담음
if (temp > result) {
result = temp;
}

// 첫번째 인덱스를 이동
firstOneIdx = nextOneIdx;
}

return result;
}

public static void main(String[] args) {
Solution solution = new Solution();

Random random = ThreadLocalRandom.current();

for (int i = 0; i< 10000; i++){

int input = random.nextInt(2147483647);
int result = solution.solution(input);

System.out.println("input = "+input+" result = "+result);
}

}
}


스텍오버플로우에서 다른사람 풀이도 보니 다르게 푸는것을 보는 재미가 있었습니다.

1과 1사이의 인덱스를 가지고 푼 예가 없어서 스텍오버플로에 답변으로 남겼습니다.

참조