[Lessons1]BinaryGap
by EastGlow
문제
https://app.codility.com/programmers/lessons/1-iterations/binary_gap/
풀이
public class Solution {
public int solution(int N) {
// write your code in Java SE 8
boolean flag = false;
int biggerNum = 0;
int tempNum = 0;
String binaryStr = Integer.toBinaryString(N);
char[] binaryArray = binaryStr.toCharArray();
for(char ch : binaryArray){
if('1' == ch){
if(tempNum > 0){
if(tempNum > biggerNum){
biggerNum = tempNum;
flag = true;
}
}
tempNum = 0;
}else{
tempNum++;
}
}
if(flag){
return biggerNum;
}else{
return 0;
}
}
}
한 달 전쯤에 풀어봤었던 문제인데 당시엔 정답률이 40% 밖에 안 나왔었다. 그때 당시 계속 고민하고 코드 수정해서 제출해봤는데 40%를 넘지 못해서 그냥 넘어갔던 문제이다.
코딜리티 문제를 다시 풀어보기 위해 이 문제도 다시 접하게 되었는데 다시 코드를 짜서 제출하니 이번엔 2번 만에 100%를 맞았다.
로직은 간단하게 전달받은 숫자를 2진수로 변환 후, char 배열로 바꿔준다. char 배열로 루프문을 돌려서 “1”일 때와 “0”일 때를 먼저 체크해주고 “1”일 때는 tempNum이 0보다 클 때와 아닐 때를 나눠준다.
0보다 크다면 “1”을 만난 후에 “0”을 1번이라도 만났다는 얘기이기 때문에 만약 그 tempNum이 제일 큰 수를 담는 biggerNum보다 크다면 biggerNum에 tempNum을 담아준다.
“1”을 최소 2번은 만나야 flag 값이 true가 되므로 flag가 true일 때만 biggerNum을 리턴해주고 아니면 0을 리턴해준다.
Subscribe via RSS