Ex) Level1 - 평균 구하기
accumulate() - numeric 헤더!
<hide/>
#include <string>
#include <vector>
#include <numeric>
using namespace std;
double solution(vector<int> arr) {
double answer = 0;
int iSum = accumulate(arr.begin(), arr.end(), 0);
answer = iSum / (static_cast<double>(arr.size()));
return answer;
}
Ex) Level1 - 자릿수 더하기
<hide/>
#include <iostream>
using namespace std;
int solution(int n)
{
int answer = 0;
while (0 < n)
{
answer += n % 10;
n /= 10;
}
return answer;
}
Ex) Level1 - 약수의 합
약수 구할 때 제곱수 처리를 안했었음..
<hide/>
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for (int i = 1; i * i <= n; ++i)
{
if (n % i == 0)
{
answer += i;
if (i != n/i)
{
answer += n / i;
}
}
}
return answer;
}
Ex) Level1 - 정수 제곱근 판별
<hide/>
#include <string>
#include <vector>
using namespace std;
long long solution(long long n) {
long long answer = -1;
for (long long i = 1; i * i <= n; ++i)
{
if (n == i * i)
{
answer = (i + 1) * (i + 1);
}
}
return answer;
}
Ex) Level1 - 문자열 내 p와 y의 개수
<hide/>
#include <string>
#include <iostream>
using namespace std;
bool solution(string s)
{
bool answer = true;
size_t uSizeOfS = s.size();
int iCount = 0;
for (size_t i = 0; i < uSizeOfS; ++i)
{
if ('P' == toupper(s[i]))
{
++iCount;
}
if ('Y' == toupper(s[i]))
{
--iCount;
}
}
if (0 != iCount)
{
answer = false;
}
return answer;
}
Ex) Level1 - x만큼 간격이 있는 n개의 숫자
다른 사람의 풀이를 보니, vector resize()를 사용하심.
나도 이제부터 vector가 나온다면 꼭 resize()나 reserve()하는 습관을 들여야지.
<hide/>
#include <string>
#include <vector>
using namespace std;
vector<long long> solution(int x, int n) {
vector<long long> answer;
size_t uCount = 0;
for (long long i = x; ; i+=x)
{
if (uCount == n)
{
break;
}
answer.push_back(i);
++uCount;
}
return answer;
}
Ex) Level1 - 문자열을 정수로 바꾸기
어이없는 문제ㅋㅋ
<hide/>
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
answer = stoi(s);
return answer;
}
Ex) Level1 - 하샤드 수
오랜만에 재귀함수를 활용해보았다.
<hide/>
#include <string>
#include <vector>
using namespace std;
int SumDigits(int _iX)
{
if (_iX <= 0)
{
return 0;
}
return _iX % 10 + SumDigits(_iX / 10);
}
bool solution(int x) {
bool answer = false;
int iSum = SumDigits(x);
if (0 == x % iSum)
{
answer = true;
}
return answer;
}
Ex) Level1 - 정수 내림차순으로 배치하기
익명함수 쓰는 방법을 까먹음. 반환 자료형은 굳이 안붙혀도 된다..
<hide/>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define DIGIT_COUNT (30)
long long solution(long long n) {
long long answer = 0;
vector<long long> viDigits;
viDigits.reserve(DIGIT_COUNT);
while (0 < n)
{
viDigits.push_back(n % 10);
n /= 10;
}
sort(viDigits.begin(), viDigits.end(), [](int a, int b){
return a > b;
});
size_t uSizeOfDigits = viDigits.size();
for (size_t i = 0; i < uSizeOfDigits; ++i)
{
answer = answer * 10 + viDigits[i];
}
return answer;
}
Ex) Level1 - 나머지가 1이 되는 수 찾기
바보같이 실수함.
<hide/>
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for (int i = 2; i <= n; ++i)
{
if (n % i == 1)
{
answer = i;
break;
}
}
return answer;
}
Ex) Level1 - 자연수 뒤집어 배열로 만들기 [X]
<hide/>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define DIGIT_COUNT (12)
vector<int> solution(long long n) {
vector<int> answer;
answer.reserve(DIGIT_COUNT);
if (0 == n)
{
answer.push_back(0);
return answer;
}
while (0 < n)
{
answer.push_back(n % 10);
n /= 10;
}
sort(answer.begin(), answer.end(), [](int a, int b) { return a > b; });
return answer;
}
Ex) Level1 - 두 정수 사이의 합
<hide/>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
long long solution(int a, int b) {
long long answer = 0;
int iMax = max(a, b);
int iMin = min(a, b);
while (iMin <= iMax)
{
answer += iMin;
++iMin;
}
return answer;
}
댓글