수학 205

[백준 4673] 셀프 넘버 [C]

풀이 생성자가 없으면, d(n)을 형성하지 못하므로, d(n)이 아닌 수들이 셀프 넘버라고 볼 수 있다. 소스코드 #include #define MAX 10001 int n_selfNum(int n){ int result = n; for (; n > 0; n /= 10) result += n%10; return result; } int main(){ int arr[MAX] = {0, }; for (int i = 1; i < MAX; i++){ int n = n_selfNum(i); n < MAX && (arr[n] = 1); } for (int i = 1; i < MAX; i++) !arr[i] && printf("%d\n", i); } 출처 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D..

[백준 15596] 정수 N개의 합 [C]

풀이 다음처럼 반복문 내부의 변화식 란에서 연산을 하면 틀린다. 이에 대해 아직 아는 정보가 없어 추후 알게된다면 글을 하나 작성하겠다. long long sum(int *a, int n) { long long ans = 0; for (int i = 0; i < n; i++, ans += a[i]); return ans; } 소스코드 long long sum(int *a, int n) { long long ans = 0; for (int i = 0; i < n; i++) ans += a[i]; return ans; } 출처 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C..

[백준 1110] 더하기 사이클 [C]

풀이 원래의 수로 돌아올 때까지 일의 자리에 10을 곱한 값과, 십의자리/일의자리를 쪼개서 더한 값을 10으로 나누었을 때의 나머지를 더하면 된다. result = ((N%10)*10) + (((N/10) + (N%10))%10); 소스코드 #include int main() { int N, circle = 0, result; scanf("%d", &N); int save_N = N; while (1) { result = ((N%10)*10) + (((N/10) + (N%10))%10); circle++; if (result == save_N) break; N = result; } printf("%d", circle); } 출처 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가..

[백준 15552] 빠른 A+B [C]

풀이 printf(), scanf()는 충분히 빠르므로 그냥 사용해도 된다. 소스코드 #include int main() { int N, A, B; scanf("%d", &N); while (N--) { scanf("%d %d", &A, &B); printf("%d\n", A + B); } } 출처 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net