Ex) Level0 - 7의 개수
<hide/>
#include <string>
#include <vector>
using namespace std;
void Count(int _iN, int& _refAnswer)
{
if (_iN <= 0)
{
return;
}
Count(_iN / 10, _refAnswer);
if (_iN % 10 == 7)
{
++_refAnswer;
}
}
int solution(vector<int> array) {
int answer = 0;
size_t uSizeOfArray = array.size();
for (size_t i = 0; i < uSizeOfArray; ++i)
{
Count(array[i], answer);
}
return answer;
}
Ex) Level0 - 이진수 더하기
또 반복문에서 size_t와 --를 함께 썼음... 주의하자.
반복 풀이가 필요할듯. 굉장히 오래 걸림.
<hide/>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define STACK_SIZE (16)
#define NOTATION (2)
class Stack
{
public:
Stack()
: m_data{ 0, }
, m_uTop(0u)
{
}
void Push(char _chData)
{
if (STACK_SIZE - 1 <= m_uTop)
{
// Overflow.
return;
}
m_data[++m_uTop] = _chData;
}
bool Empty()
{
return 0u == m_uTop;
}
int Pop()
{
if (true == Empty())
{
// Underflow.
return 0;
}
return m_data[m_uTop--];
}
public:
int m_data[STACK_SIZE];
size_t m_uTop;
};
string solution(string bin1, string bin2) {
string answer = "";
size_t uSizeOfBin1 = bin1.size();
size_t uSizeOfBin2 = bin2.size();
size_t uMaxSize = max(uSizeOfBin1, uSizeOfBin2);
Stack sBin1;
for (size_t i = 0; i < uSizeOfBin1; ++i)
{
sBin1.Push(bin1.at(i) - '0');
}
Stack sBin2;
for (size_t i = 0; i < uSizeOfBin2; ++i)
{
sBin2.Push(bin2.at(i) - '0');
}
int iSum = 0;
int iCarry = 0;
for (size_t i = 0; i < uMaxSize; ++i)
{
iSum = iCarry + sBin1.Pop() + sBin2.Pop();
if (NOTATION <= iSum)
{
answer += (iSum % NOTATION) + '0';
iCarry = 1;
}
else
{
answer += (iSum % NOTATION) + '0';
iCarry = 0;
}
}
// Calculate MSB.
iSum = iCarry + sBin1.Pop() + sBin2.Pop();
if (0 != iSum)
{
if (NOTATION <= iSum)
{
answer += (iSum % NOTATION) + '0';
iCarry = 1;
}
else
{
answer += (iSum % NOTATION) + '0';
iCarry = 0;
}
}
reverse(answer.begin(), answer.end());
return answer;
}
Ex) Level0 - 숨어있는 숫자의 덧셈 (2)
<hide/>
#include <string>
#include <vector>
using namespace std;
int solution(string my_string) {
int answer = 0;
size_t uSizeOfMyString = my_string.size();
int iSumOfUnit = 0;
for (size_t i = 0; i < uSizeOfMyString; ++i)
{
if ('0' <= my_string.at(i) && my_string.at(i) <= '9')
{
iSumOfUnit = iSumOfUnit * 10 + (my_string.at(i) - '0');
}
else
{
answer += iSumOfUnit;
iSumOfUnit = 0;
}
}
// Calculate remains.
answer += iSumOfUnit;
return answer;
}
Ex) Level0 - 공 던지기
<hide/>
#include <string>
#include <vector>
using namespace std;
#define OFFSET (2)
int solution(vector<int> numbers, int k) {
int answer = 0;
int iSizeOfNumbers = numbers.size();
int i = 0;
size_t uCount = 1;
while (true)
{
if (k == uCount)
{
answer = numbers.at(i);
break;
}
i = (i + OFFSET) % iSizeOfNumbers;
++uCount;
}
return answer;
}
댓글