반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C] 백준 4673번 : 셀프 넘버
Baekjoon

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

2023. 1. 7. 20:16
반응형

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

코드

#include <stdio.h>
int d(int n);
int d(int n) {     //d(n)을 만드는 함수
	int sum = n;
	while (n >= 10) {
		sum += (n % 10);
		n /= 10;
	}
	sum += n;
	return sum;
}

int main() {
	int a[10001] = {};
	int b[10001] = {};

	for (int i = 1; i < 10001; i++) { a[i - 1] = i; b[i - 1] = i; } // 배열에 1~10000까지 넣기

	for (int i = 0; i < 10001; i++) {
		int temp = 0;
		temp = d(a[i]);
		for (int k = 0; k < 10001; k++) {
			if (temp == a[k]) {	b[k] = 0;}	// d(n)은 다시 생성자가 될 수 있기 때문
		}
	}
	for (int i = 0; i < 10001; i++) {
		if (b[i] != 0) { printf("%d\n", b[i]); }
	}
	return 0;
}

☞ 풀이 전

우선,셀프 넘버를 찾는 것보다 규칙이 있는 셀프 넘버가 아닌 것을 찾아서 배열에서 제외시키는게 더 효율적이라고 생각했다. (라고 생각했음에도 자꾸 삽질해서 약간 참고했다.)

셀프 넘버가 아닌 수는 해당하는 배열의 수의 index를 찾아서 값을 0으로 선언해주어 셀프 넘버를 출력할 수 있게끔해주려 했다.

 

☞ 풀이 후

10000이하의 수라고 문제에서 명시했음에도 2자리 수나 3,4자리 수여도 (100,1000)같은 것만 생각하여 6,7번 줄을 바꿔 코드를 작성하여 자꾸 이상한 수가 나왔었다..

 

n을 d(n)의 생성자라 했을 때 d(n)은 다시 d(d(n))의 생성자가 될 수 있었고 역시 예제를 통해 보여줬다.

그래서 난 배열을 하나 더 만들어주어 n으로 시작하여 d(d(n)) . . .으로 뻗어가는 수열이 제외되지 않도록 하였다.

하지만 지저분했다..

 

☞ 다른 사람의 코드

#include <stdio.h>

int d(int n) {
    int sum = n;
    while(n>0) {
        sum += n%10;
        n = n/10;
    }
    return sum;
}

int main() {
    int arr[10001]={0}, result=0;
    for(int i=0; i<10001; i++) {
        result = d(i);
        if(result < 10001)
            arr[result] = 1;
    }
    for(int j=0; j<10001; j++) {
        if(arr[j] != 1)
            printf("%d\n", j);
    }
}
출처 : https://unie2.tistory.com/10

이 분은 배열의 index와 원소의 값을 같게 생각하였다.

0을 굳이 제외할 필요가 없었는데 이 사소한 디테일이 굉장히 간략하게 해주었다.

사소함의 중요성 그리고 예제 같은 것이 주어졌을 때 어렵게 생각하기 보다 한 번 해보자라는 생각

이전에 나왔던 특정 배열의 원소만 출력하기 아이디어

배울 게 많았던 문제였다. 더 정진하자.

반응형
저작자표시 (새창열림)

'Baekjoon' 카테고리의 다른 글

[C] 백준 2908번 : 상수  (0) 2023.01.09
[C] 백준 1065번 : 한수  (0) 2023.01.09
[C]백준 15596번 : 정수 N개의 합  (0) 2023.01.05
[C] 백준 4344번 : 평균은 넘겠지  (0) 2023.01.04
[C] 백준 8958번 : OX퀴즈  (1) 2022.09.08
    'Baekjoon' 카테고리의 다른 글
    • [C] 백준 2908번 : 상수
    • [C] 백준 1065번 : 한수
    • [C]백준 15596번 : 정수 N개의 합
    • [C] 백준 4344번 : 평균은 넘겠지
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바