Problem From.
https://leetcode.com/problems/minimum-flips-to-make-a-or-b-equal-to-c/
오늘 문제는 a,b,c 가 주어졌을때, 각각의 숫자를 bit 형식으로 나타내고 a OR b 연산을 했을때, c 가 될 수 있도록, a 또는 b 의 각 자리의 bit 값을 바꿀때, 바꿔야하는 최소의 횟수를 구하는 문제였다.
먼저 a,b,c 를 각각 bit로 표현한 값을 구한뒤, 각 자리수를 비교해가면서 OR 연산을 해주었다.
각각의 자릿수가 제일 큰 길이보다 짧을 수 있으므로, 자리가 없는 곳은 0 으로 대체해서 계산하였다.
class Solution {
fun minFlips(a: Int, b: Int, c: Int): Int {
var answer = 0
val bitA = Integer.toBinaryString(a).toCharArray().reversed()
val bitB = Integer.toBinaryString(b).toCharArray().reversed()
val bitC = Integer.toBinaryString(c).toCharArray().reversed()
val length = Math.max(Math.max(bitA.size, bitB.size), bitC.size)
for(i in 0 until length) {
val a = if(i >= bitA.size) 0 else bitA[i].toInt() - 48
val b = if(i >= bitB.size) 0 else bitB[i].toInt() - 48
val c = if(i >= bitC.size) 0 else bitC[i].toInt() - 48
when {
c == 0 && a == 1 && b == 1 -> answer += 2
c == 0 && a == 1 && b == 0 -> answer += 1
c == 0 && a == 0 && b == 1 -> answer += 1
c == 1 && a == 0 && b == 0 -> answer += 1
}
}
return answer
}
}