본문 바로가기

Algorithm/Brute Force

(C++) - LeetCode (easy) 401. Binary Watch

반응형

https://leetcode.com/problems/binary-watch/description/

 

Binary Watch - LeetCode

Can you solve this real interview question? Binary Watch - A binary watch has 4 LEDs on the top to represent the hours (0-11), and 6 LEDs on the bottom to represent the minutes (0-59). Each LED represents a zero or one, with the least significant bit on t

leetcode.com

전수조사 문제였습니다.

📕 풀이방법

📔 풀이과정

2진수 단위로 bit가 켜지고 꺼지기 때문에 쉽게 검사 가능합니다.

1. 2차원 for loop를 수행합니다. 0 - 11 시 와 0 - 59 분 까지의 범위를 검사하며 시간과 분의 bit를 세줍니다.

num >> 1하면서 num & 1 했을 때 1이라면 num에 해당하는 bit가 켜져 있으므로 세주는 방식으로 세줄 수 있습니다.

2. 시간 h의 bit와 시간 m의 bit를 더한 값이 turnedOn 이라면 경우에 해당하므로 형식에 맞춰 string으로 변환하는 함수  getTimeString을 구현해 수행 후 반환한 결과를 ans에 push_back해줍니다.


📕 Code

📔 C++

class Solution {
public:
    int countBit(int num){
        int count = 0;

        while(num > 0) {
            if((num & 1) == 1) count++;
            num = num >> 1;
        }

        return count;
    }

    string getTimeString(int h, int m) {
        string t = to_string(h) + ":";
        if(m < 10) t += "0";
        t += to_string(m);
        return t;
    }
    
    vector<string> readBinaryWatch(int turnedOn) {
        vector <string> ans;
        for(int h = 0; h <= 11; h++) {
            for(int m = 0; m <= 59; m++) {
                if(countBit(h) + countBit(m) == turnedOn) {
                    
                    ans.push_back(getTimeString(h, m));
                }
            }
        }
        return ans;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.