Daily LeetCode Challenge - 1318. Minimum Flips to Make a OR b Equal to c

Min Young Kim·2023년 6월 7일
0

algorithm

목록 보기
165/198

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
    }
}
profile
길을 찾는 개발자

0개의 댓글