• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

[๋ฐฑ์ค€] 4673

04 Dec 2020

์ฝ”๋“œ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฌธ์ œ ํ™•์ธ

ํ’€์ด

๋ฌธ์ œ ํ•ด์„ค

์–‘์˜ ์ •์ˆ˜ n์— ๋Œ€ํ•ด d(n) = n + (n์˜ ๊ฐ ์ž๋ฆฌ์ˆ˜)
๊ฐ€๋ น d(75) = 75 + 7 + 5 = 87
33์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์ˆ˜๋Š” 33+3+3=39,
๋‹ค์Œ ์ˆ˜๋Š” 39+3+9=51,
๋‹ค์Œ ์ˆ˜๋Š” 51+5+1=57์ด๋‹ค.
์ด๋ฅผ ์ด์šฉํ•˜์—ฌ {33, 39, 51, 57, โ€ฆ} ์˜ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

n์€ d(n)์˜ ์ƒ์„ฑ์ž์ด๋‹ค. 33์€ 39์˜ ์ƒ์„ฑ์ž์ด๋‹ค.
101์€ 91(91+9+1=101)๊ณผ 100(100+1+0+0)์œผ๋กœ 2๊ฐœ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋‹ค.
์ด๋•Œ ์…€ํ”„ ๋„˜๋ฒ„๋ž€ โ€˜์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ์ˆ˜โ€™๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
100๋ณด๋‹ค ์ž‘์€ ์…€ํ”„ ๋„˜๋ฒ„๋Š” 1, 3, 5, 7, 9, 20, 31, โ€ฆ ๋กœ ์ด 13๊ฐœ๊ฐ€ ์žˆ๋‹ค.
10000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์…€ํ”„ ๋„˜๋ฒ„๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜

์ƒ์„ฑ์ž๊ฐ€ ์—†๋‹ค = d(n)์˜ ๊ทœ์น™์œผ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ์ˆ˜ (N์€ 10,000)
1๋ถ€ํ„ฐ N๊นŒ์ง€ d(n)์˜ ๊ทœ์น™์„ ์ ์šฉํ–ˆ์„ ๋•Œ ๋“ฑ์žฅํ•œ ์ˆ˜๋Š” boolean ๋ฐฐ์—ด์—์„œ true๋กœ ์ฒดํฌํ•ด์ค€๋‹ค. => O(N)
๋‹จ, ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 9999+9+9+9+9=10035์ด๋‹ˆ boolean์€ check[10036]
์ดํ›„ 1๋ถ€ํ„ฐ N๊นŒ์ง€ boolean ๋ฐฐ์—ด์„ ๋Œ๋ฉฐ false์ธ ๊ฒฝ์šฐ ์ถœ๋ ฅ => O(N)
์ด O(N+N) = O(N)์œผ๋กœ ๋‹ต์„ ๊ตฌํ•˜๊ณ , ์‹œ๊ฐ„ ์ œํ•œ์€ 1์ดˆ์ด๋ฏ€๋กœ N์ด 10^8=100,000,000์ผ ๋•Œ ๊นŒ์ง€๋Š” ๋Ÿฌํ”„ํ•˜๊ฒŒ ์ปค๋ฒ„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ N์€ 10,000์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋‚ด์— ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ

#include <iostream>
#include <string>
#include <vector>
#include <deque>
#include <algorithm>
#include <math.h>

using namespace std;

int makeNum(int n) {
	int sum = n;
	int tmp = n;
	while (tmp >= 1) {
		sum += tmp % 10;
		tmp = floor(tmp / 10);
	}
	return sum;
}

int main()
{
	bool check[10036] = { false, };
	int N = 10000;
	for (int i = 1; i <= N; i++) {
		check[makeNum(i)] = true;
	}
	for (int i = 1; i <= N; i++) {
		if (check[i] == false)
			cout << i << endl;
	}
	return 0;
}



problem_solvingc++ Share Tweet +1