[문제] https://www.acmicpc.net/problem/4673
[풀이]
1. 길이 10000짜리 배열을 선언하고 모든 값을 0으로 초기화 시켜준다.
2. 셀프넘버의 생성자는 셀프넘버보다 클 수 없기 때문에 10000까지의 수를 생성자로 취급하고, 이 생성자가 만들어낸 번호가 10000보다 작으면 해당 칸의 값을 1로 변경한다.
3. 배열을 한 번 훑어서 내부 값이 0이라면 출력한다.
(전체 코드)
#include <iostream>
using namespace std;
#define SIZE 10001
int ten(int);
int hun(int);
int thou(int);
int main() {
int num[SIZE] = { 0, };
int self = 0;
for (int i = 1; i < SIZE; i++) {
self = i + (i%10) + ten(i) + hun(i) + thou(i);
if(self < SIZE) num[self] = 1;
self = 0;
}
for (int i = 1; i < SIZE; i++) {
if (num[i] == 0) cout << i << endl;
}
return 0;
}
int ten(int n) {
return (n % 100) / 10;
}
int hun(int n) {
return (n % 1000) / 100;
}
int thou(int n) {
return n / 1000;
}
셀프넘버를 모두 수식으로 만들기엔 복잡하니, 각 자리 수의 숫자를 출력하는 함수를 만든다. 일의 자리 수는 10으로 나머지 연산을 하면 되니 따로 만들어 주지 않았다.
[백준] 1449번 수리공 항승 (c++) (0) | 2021.07.10 |
---|---|
[백준] 1157번 단어 공부 (c++) (0) | 2021.07.07 |
[백준] 1712번 손익분기점 (c++) (0) | 2021.07.05 |
[백준] 1110번 더하기 사이클(c++) (0) | 2021.07.04 |
[백준] 10818번 최소, 최대 (c++) (0) | 2021.07.04 |
댓글 영역