AI 공부 도전기

[Baekjoon] C++ 6단계 함수 (15596 정수 N개의 합, 4673 셀프 넘버, 1065 한수)

 

     

 

15596 정수 N개의 합

 

https://www.acmicpc.net/problem/15596

 

15596번: 정수 N개의 합

C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang)

www.acmicpc.net

 

방법 1 - 13740KB, 8ms, 148B

#include <vector>
long long sum(std::vector<int> &a) {
	long long ans = 0;
	for (int i = 0; i < a.size(); i++) {
		ans += a.at(i);
	}
	return ans;
}

 

방법 2 - 13740KB, 24ms, 207B

#include <vector>
using namespace std;
long long sum(vector<int>& a) {
    long long ans = 0;
    for (vector<int>::iterator iter = a.begin(); iter < a.end(); iter++)
        ans += *iter;
    return ans;
}

 

4673 셀프 넘버

https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

방법 1 - 2020KB, 40ms, 345B

#include <iostream>
using namespace std;

int sum(int n) {
	int m = n;
	while (n) {
		m += n % 10;
		n /= 10;
	}
	return m;
}

int main() {
	int d[10001] = {};
	int t;
	for (int i = 1; i <= 10000; i++) {
		if (d[i] == 0) {
			cout << i << endl; 
			t = i;
			while (1) {	
				t = sum(t);
				if (t > 10000) break;
				d[t]++;			
			}
		}		
	}
}

 

방법 2 - 2020KB, 40ms, 299B

 

#include <iostream>
using namespace std;

int sum(int n) {
	int m = n;
	while (n) {
		m += n % 10;
		n /= 10;
	}
	return m;
}

int main() {
	int d[10001] = {};
	int t;
	for (int i = 1; i <= 10000; i++) {				
		if (d[i] == 0) 
			cout << i << endl; 
		t = sum(i);
		if (t <= 10000)
			d[t]++;		
	}
}

 

방법 3 - 1112KB, 0ms, 213B

 

#include<stdio.h>
int sum(int n){
	int m=n;
	while(n){
		m+=n%10;
		n=n/10;
	}
	return m;
}

int main(){
	int k[10100]={};
	for(int i=1; i<=10000; i++){			
		if(k[i]==0) 
			printf("%d\n",i);
		k[sum(i)]=1;		
	}
}

 

1065 한수

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

방법 1 - 2020KB, 0ms, 401B

 

#include <iostream>
using namespace std;

int v(int n) {
	int cnt = 0;
	if (n < 100) cnt = n;
	else if (n == 1000) cnt = v(999);
	else if (100 <= n) {
		cnt = 99;		
		for (int i = 100; i < n+1; i++) {
			int c12 = (i % 100) / 10 - i % 10;
			int c23 = i / 100 - (i % 100) / 10;			
			if (c12==c23) cnt++;
		}
	}
	return cnt;
}

int main() {
	int a;
	cin >> a;
	int cnt = v(a);
	cout << cnt << "\n";
}

 

방법 2 - 1112KB, 0ms, 159B

 

#include <stdio.h>
int main(){
	int n, cnt=0;
	scanf("%d", &n);
	for(int i=1; i<=n; i++){
		if(i<100||i/100+i%10==2*((i%100)/10))cnt++;
	}
	printf("%d",cnt);
}

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading