[백준4673]셀프 넘버

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

1.문제 이해

셀프 넘버? 에 대해서 이해하는 과정이 필요했다.
셀프넘버 = 자기 자신 + 모든 각 자리수
이것을 이해하면 됐지만 아래 예시 같은 경우 헷갈렸다.
Ex) d(1) = 1(나 자신) + 1 (1의 자리수에 값)

그래서 이걸 이해하고 메모이제이션을 활용해 1부터 쭉 ~ vector에 각 값을 채워나가는 방식으로 풀면 되겠다 싶었다!

2. 소스코드

#include<iostream>
using namespace std;

int all_number[10001];

int dn(int a) {
	int ans;
	ans = a; //기본적으로 그 수를 넣어주고
	while (a!=0) {
		int temp = a % 10;
		a = a / 10;
		ans = ans + temp;
	}
	return ans;
}


int main() {
	for (int i = 0; i < 10001; i++)all_number[i] = 0;
	for (int i = 1; i < 10001; i++) {
		int c = dn(i);
		if (c <= 10000)all_number[c] = 1;
	}

	for (int i = 1; i < 10001; i++) {
		if (all_number[i] == 0)cout << i << endl;
	}

}

3. 느낀 점

셀프 넘버 라는 단어가 헷갈리게 만들었지만 생각보다 뻔한거에서도 배울 꺼가 매우 많다고 생각 했던 문제 !

각 자리수에 값을 구할 때는 %10 을 해서 구해야지 /10 을 하면 몫이 남는다는 기본적인 걸 실수했다.

4. 기억해두면 좋을 Tip !

  1. Self Number
  2. 각 자리수에 값은 while 돌리고 %10

좋은 웹페이지 즐겨찾기