[백준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 !
- Self Number
- 각 자리수에 값은 while 돌리고 %10
Author And Source
이 문제에 관하여([백준4673]셀프 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@junbley/백준4673셀프-넘버저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)