- 비트 문제
- 문제분석
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;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 1684. Count the Number of Consistent Strings (0) | 2024.09.12 |
---|---|
[FrontEnd] WebPack (1) | 2024.09.12 |
[코테연습] 2326. Spiral Matrix IV (0) | 2024.09.09 |
[코테연습] 874. Walking Robot Simulation (0) | 2024.09.05 |
[코테연습] 1894. Find the Student that Will Replace the Chalk (0) | 2024.09.02 |