코딩테스트/HackerRank

[HackerRank] Flipping bits 📌

주니어주니 2023. 4. 13. 21:40

 

문제 

 

주어진 10진수 long 값을 -> 32비트 2진수로 변환 -> 비트 뒤집기 -> 10진수로 반환

 

 

 

다른 사람 풀이 

 

private static long flippingBits(long n) {

    // 10진수 -> 2진수 -> 32비트 남은자리에 0 -> 각 표현 뒤집음 -> 10진수 반환
    // 10진수 -> 2진수
    String binary = Long.toBinaryString(n);

    StringBuilder sb = new StringBuilder();

    // 32비트에서 2진수 길이 뺀 만큼 먼저 0을 채워줌
    for(int i=0; i < 32-binary.length(); i++) {
        sb.append('0');
    }
    // 그 다음에 2진수 채움
    sb.append(binary);
    // 0을 2로, 1을 0으로, 2를 1로 
    String flippedStr = sb.toString().replace('0', '2').replace('1', '0').replace('2', '1');
    // string -> 2진수
    return Long.parseLong(flippedStr, 2);
}

 

아악 2진수로 바꾸고 sb 만들어서 추가하는 거까진 했는데 .... 

 

0을 저렇게 채워주면 되는구나 ... 

0이랑 1뒤집기 할 때 temp 하듯이 뒤집기 !!! ㅠ 생각도 못했다