[풀이 - 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";
}