본문 바로가기
TIL

[코테연습] 2220. Minimum Bit Flips to Convert Number

by 크라00 2024. 9. 11.

 

 

- 비트 문제

 

https://leetcode.com/problems/minimum-bit-flips-to-convert-number/submissions/1386236617/?envType=daily-question&envId=2024-09-11

 

- 문제분석

 

1. int start = 10 과 int goal = 7 숫자가 있으면, 해당 숫자를 이진수로 다음과 같이 변환 가능하다.

1-1. 10 => 1010 / 7 => 0111

2. 이진수를 1 -> 0 으로, 0 -> 1으로 변경되는 것을 플립한다고 한다.

3. 10의 이진수 1010 이, 7의 이진수 0111 로 플립하기 위해서는 3번 변경해야한다.

3-1. 1010 -> 0010 -> 0110 -> 0111

4. start 숫자가 goal 숫자로 동일하게 플립하기 위한 가장 최소한의 변경 수를 구하여라.

 

- 문제풀이

 

1.  start 숫자와 goal 의 숫자를 비트연산자 ( | ) 을 이용하여 합친다.

1-1. 10 => 1010 / 7 => 0111 / 10 | 7 => 1111

2.  start 숫자와 goal의 숫자를 비트연산자 ( & ) 을 이용하여 교차한다.

2-1. 10 => 1010 / 7 => 0111 / 10 & 7 => 0010

3. 2개의 숫자를 비트연산자 ( ^ ) 을 이용하여 교차한다.

3-1. 1111 ^ 0010 => 1101

4. 1에 해당하는 숫자는 플립 한 숫자이므로, 1의 숫자를 카운팅하여 리턴한다.

 

 

class Solution {
    /**
    1010
    0111
    
    1111
    0010
    

    011
    100

    111
    000
    
    몇개가 다른지, 몇개가 동일한지
     */
    public int minBitFlips(int start, int goal) {
     
        int cnt = 0;

        String bit = Integer.toBinaryString((start | goal) ^ (start & goal));
        String[] arr = bit.split("");
        for (String s : arr) {
            if (s.equals("1")){
                cnt++;
            }
        }
        return cnt;
    }
}