본문 바로가기
C++/프로그래머스 문제풀이

23-01-18

by GameStudy 2023. 1. 18.

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;
}

'C++ > 프로그래머스 문제풀이' 카테고리의 다른 글

23-01-20  (0) 2023.01.20
23-01-19  (0) 2023.01.19
23-01-17  (0) 2023.01.17
23-01-16  (0) 2023.01.16
23-01-15  (0) 2023.01.15

댓글