# 여는 글
여러분들은 코딜리티(Codility)라는걸 아십니까?
저도 우연찮게 코딜리티(Codility)를 알게되었는데,
알고리즘 풀이 사이트입니다.
저도 한번, 풀어봤는데 꽤 괜찮더라구요.
그런의미에서 한번 공유해 보겠습니다.
# 문제
양수의 int 형 숫자를 이진수로 표현하였을때 1과 다른 1의 차이(Binary Gap), 즉 1과 다른 1사이의 0의 개수가 최대인 경우를 찾아야 한다.
예를들면 9는 이진수로 1001 이니 1과 1사이에 0이 2개가 있어 Binary Gap의 길이는 2이다. 529같은 경우는 이진수1000010001 이며 Binary Gap 은 총 2개인데, 100001의 부분의 4와 1001 부분의 3이다. 이때 최대값은 4이므로 4를 리턴하면 된다.
정수의 범위는 1~2,147,483,647 이다.(int형의 양수 최대 표현 범위)
복잡도 요구사항(시간복잡도 O(log(N)), 공간복잡도 O(1))
# 코드
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 | // 이진 갭 알고리즘 함수 class Solution { public int solution(int N) { int result = 0; int CurrentBinaryGap = 0; // 십진수를 이진수로 바꿔주는 함수 String DecimalToBinary = Integer.toBinaryString(N); // 이진수를 글자 수 만큼 반복문을 돌린다. for(int i = 0; i < DecimalToBinary.length(); i++){ // 이진수가 0일 때 if(DecimalToBinary.charAt(i) == '0'){ CurrentBinaryGap++; }else{ // 이진수가 0이 아니라면 이전 값과 비교(첫번째 일 경우 result는 0이 됨) if(CurrentBinaryGap > result){ result = CurrentBinaryGap; } CurrentBinaryGap = 0; } } return result; } } | cs |
# 마무리
위 포스트는 제가 직접 제작한 것 입니다.
그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.
만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.
빠른 처리 하도록 하겠습니다.
티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요
(URL : http://junprogramer.tistory.com/)
읽어주셔서 감사합니다.
'잡다한 기술' 카테고리의 다른 글
[코딜리티/Codility] CyclicRotation 문제 (0) | 2018.05.18 |
---|---|
[코딜리티/Codility] OddOccurrencesInArray 문제 (0) | 2018.05.18 |
[자바스크립트(javascript)]가장 기본적인 아이디 가져오는 방법 document.getElementById() (0) | 2018.03.28 |
2018년 3월 4주차 주기 (0) | 2018.03.25 |
[K-Move/해외인턴/IT인턴]미국에서 은행 계좌 만들기 (0) | 2018.03.23 |