본문 바로가기
코딩테스트/백준

[백준] 단계별로 풀어보기 > 함수 (c++)

by Hwan,. 2022. 1. 14.
728x90
반응형

문제 1. 정수 N개의 합

#include <vector>

using namespace std;

long long sum(vector<int>& a) {
	long long ans = 0;

	for (int i = 0; i < a.size(); i++) {
		ans += a.at(i);
	}

	return ans;
}

 

문제 2. 셀프 넘버 

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

int selfnumber(int a) {
    int digit = to_string(a).size(), tmp = 0, a_copy = a, sum = a;
    int* arr = new int[digit];
    
    for (int i = 0; i < digit; i++) {
        tmp = pow(10, (digit - (i + 1)));
        arr[i] = a_copy / tmp;
        a_copy %= tmp;
    }
    
    for (int i = 0; i < digit; i++) {
        sum += arr[i];
    }

    return sum;
}

int main() {
    int a = 10000;

    cin.tie(NULL);
    cin.sync_with_stdio(false);

    int* arr = new int[a];
    for (int i = 0; i < a; i++) {
        arr[i] = 0;
    }

    for (int i = 0; i < a; i++) {
        arr[selfnumber(i)-1]++;
    }

    for (int i = 0; i < a; i++) {
        if (arr[i] == 0) {
            cout << i+1 << endl;
        }
    }
    return 0;
}

 

문제 3. 한수

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

bool hansu(int a) {
    bool is_flag = false;
    int tmp, cnt = 0;
    int digit = to_string(a).size();

    if (digit > 2) {
        int* arr = new int[digit];

        for (int i = 0; i < digit; i++) {
            tmp = pow(10, (digit - (i + 1)));
            arr[i] = a / tmp;
            a %= tmp;
        }

        int now_dif = 0;
        int pre_dif = arr[0] - arr[1];

        for (int i = 0; i < digit - 1; i++) {
            now_dif = arr[i] - arr[i + 1];
            if (now_dif == pre_dif) cnt++;
            pre_dif = now_dif;
        }

        if (digit - 1 == cnt) {
            is_flag = true;
        }
    }
    else {
        is_flag = true;
    }
    return is_flag;
}

int main() {
    int a = 0, cnt = 0;

    cin.tie(NULL);
    cin.sync_with_stdio(false);

    cin >> a;

    for (int i = 1; i <= a; i++) {
        if (hansu(i)) cnt++;
    }
    
    cout << cnt << endl;
    
    return 0;
}

 

결과

728x90
반응형

댓글