본문으로 바로가기

[풀이 - Sum vs XOR] : <Easy / 68.22%>

더보기
long sumXor(long n)
{
    long result = 0;
    int zeroCount = 0;
    bool begin = false;
    // make binary string
    string binary = bitset<64>(n).to_string();
    //
    for(int i = 0; i < binary.length(); ++i)
    {
        if(begin == false)
        { // find first '1'
            if(binary[i] == '1')
            {
                begin = true;
                continue;
            }
        }
        //
        if(begin == true)
        { // count '0' after first '1'
            if(binary[i] == '0')
                ++zeroCount;
        }
    }
    //
    result = (long)pow(2, zeroCount);
    //
    return result;
}

# '+'연산과  'xor' 연산이 같으려면 주어진 수를 2진수로 변환 했을 때 '0'인 부분에 '1'을 더하거나, '0'을 더하는 경우다.

따라서 변환 된 수에서 '0'의 갯수를 구하고, 그 수를 제곱하면(모든 경우의 수) 조건을 만족하는 경우의 수가 된다.

 

# Make Binary string from Integer(long)

  - string s = bitset<자리수>(바꿀 숫자).to_string();

# Make Integer from Binary string

  - int n = stoi("101011", 0, #); // # => 2 : 2진수, 8 : 8진수, 16 : 16진수

 


[풀이 - Game of Stones] : <Easy / 87.42%>

더보기
string gameOfStones(int n)
{
    int mod = n % 7;
    if(mod == 0 || mod == 1)
        return "Second";
    else
        return "First";
}

 


[풀이 - Tower Breakers] : <Easy / 86.91%>

더보기
int towerBreakers(int n, int m)
{
    if(m == 1)
        return 2;
    //
    if(n % 2 == 1)
        return 1;
    else
        return 2;
}

 


[풀이 - A Chessboard Game] : <Easy / 89.33%>

더보기
string chessboardGame(int x, int y)
{
    if ((y%4==0)||(y%4==3)||(x%4==0)||(x%4==3))
        return "First";
    else
        return "Second";
}