๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 2231๋ฒˆ : ๋ถ„ํ•ดํ•ฉ

by nitronium102 2021. 8. 27.

๋ฌธ์ œ

์–ด๋–ค ์ž์—ฐ์ˆ˜ N์ด ์žˆ์„ ๋•Œ, ๊ทธ ์ž์—ฐ์ˆ˜ N์˜ ๋ถ„ํ•ดํ•ฉ์€ N๊ณผ N์„ ์ด๋ฃจ๋Š” ๊ฐ ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ์–ด๋–ค ์ž์—ฐ์ˆ˜ M์˜ ๋ถ„ํ•ดํ•ฉ์ด N์ธ ๊ฒฝ์šฐ, M์„ N์˜ ์ƒ์„ฑ์ž๋ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 245์˜ ๋ถ„ํ•ดํ•ฉ์€ 256(=245+2+4+5)์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ 245๋Š” 256์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋œ๋‹ค. ๋ฌผ๋ก , ์–ด๋–ค ์ž์—ฐ์ˆ˜์˜ ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ์ž์—ฐ์ˆ˜๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, N์˜ ๊ฐ€์žฅ ์ž‘์€ ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

1๋ถ€ํ„ฐ i๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œ์ผœ๊ฐ€๋ฉฐ ์ƒ์„ฑ์ž๋ฅผ ์ฐพ๋Š”๋‹ค. ๋งŒ์•ฝ ์ƒ์„ฑ์ž๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด ๋ฐ”๋กœ breakํ•˜์—ฌ ์ตœ์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์ด ๋•Œ, 1๋ถ€ํ„ฐ์˜ ๋ถ„ํ•ดํ•ฉ์„ ๋ชจ๋‘ ๊ตฌํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ์—ฐ์‚ฐํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ์ž‘์ ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. N์ด 3์ž๋ฆฌ ์ˆซ์ž์ผ๊ฒฝ์šฐ, ์ตœ์†Œ๊ฐ’์ธ 100์„ ๋งŒ์กฑํ•˜๋Š” ์ˆซ์ž๋Š” 86์ด๋‹ค. 
๋”ฐ๋ผ์„œ ์‹œ์ž‘์ ์„ N์ด i์ž๋ฆฌ ์ˆ˜์ผ๋•Œ, 10^(i-1) - 9 * (i-1)๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.
N์˜ ๊ฐ’์ด ์ปค์งˆ์ˆ˜๋ก ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
(์ถœ์ฒ˜) https://cryptosalamander.tistory.com/41 

 

์ƒ์„ฑ์ž๋ฅผ ์ฐพ๋Š” ๋ฒ•์น™์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ i=1๋ถ€ํ„ฐ ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

(์œ„) i=1๋กœ ์‹œ์ž‘, (์•„๋ž˜) i=pow(10, i-1) - i*9๋กœ ์‹œ์ž‘. ์‹œ๊ฐ„๋ฉด์—์„œ ํฐ ์ฐจ์ด๋Š” ์—†๋‹ค.

 

#include <iostream>
#include <cmath>
using namespace std;

int main(){
  int N, sum, num;
  cin >> N;
  /*int tmp=N, digit=0;
  while(tmp>0){
    tmp /= 10;
    digit++;
  }

  int i = pow(10, digit-1)-9*digit;
*/
  int i=1;
  while(1){
    sum = i;
    num = i;
    while(num>0){
      sum += num%10;
      num /= 10;
    }
    if (sum == N){
      cout << i;
      break;
    }
    if (i==N){
      cout << "0";
      break;
    }
    i++;
  }
}

๋Œ“๊ธ€