[코테/JAVA] 월간 코드 챌린지 시즌2 : 2개 이하로 다른 비트

    728x90
    반응형

    2022.12.24

    코테 문제풀이 23주차 04번 문제

     

     

    문제

      ① 월간 코드 챌린지 시즌2 : 2개 이하로 다른 비트

     

      ② 링크

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

     

    접근방법

      ① Long.toBinaryString() 을 사용한 2진법 변환

      ② 2진법 변환 규칙

     

     

    풀이

      ① 접근방법 : ①

      ② 풀이

    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
    import java.util.*;
     
    class Solution {
        public long[] solution(long[] numbers) {
            return findNumberByBit(numbers);
        }
     
        public long[] findNumberByBit(long[] numbers) {
            // Output Instance
            long[] output = new long[numbers.length];
            
            for (int i = 0; i < numbers.length; i++) {
                long number = numbers[i];
                long tmp = number;
                int cnt = 0;
                
                while (tmp > 0) {
                    if(tmp%2 == 0)
                        break;
                    tmp /= 2;
                    cnt++;
                }
     
                if (cnt == 0)
                    number++;
                else 
                    number = number + (long)Math.pow(2, cnt) - (long)Math.pow(2, cnt-1);
                
                output[i] = number;
            }
            return output;
        }
    }
    cs

     

     

    결과

     

     

    실패이유

      ① 10^15 자릿수는 Long타입으로 캐스팅할때 RuntimeException이 발생한다고 한다.

     

     

    풀이

      ① 접근방법 :

      ② 풀이

    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
    import java.util.*;
     
    class Solution {
        public long[] solution(long[] numbers) {
            return findNumberByBit(numbers);
        }
     
        public long[] findNumberByBit(long[] numbers) {
            // Output Instance
            long[] output = new long[numbers.length];
            
            for (int i = 0; i < numbers.length; i++) {
                long number = numbers[i];
                long tmp = number;
                int cnt = 0;
                
                while (tmp > 0) {
                    if(tmp%2 == 0)
                        break;
                    tmp /= 2;
                    cnt++;
                }
     
                if (cnt == 0)
                    number++;
                else 
                    number = number + (long)Math.pow(2, cnt) - (long)Math.pow(2, cnt-1);
                
                output[i] = number;
            }
            return output;
        }
    }
    cs

     

     

    결과

    728x90
    반응형

    댓글