์ด๋ ๊ฒ 37, 58, 89, 145, 42, 20, 4, 16์ด ๋ฐ๋ณต๋๋ค.
2๋ฒ ์ด์ ๋ฐ๋ณต๋๊ณ , 3๋ฒ์งธ๋ก ๋ฐ๋ณต๋๊ธฐ ์์ํ๋ฉด ๊ทธ๋ ๋ฆฌํดํ๋ค. ๊ทธ๋ฆฌ๊ณ visited์์ 1์ธ ๊ฒ์ ๋ฐ๋ณต๋์ง ์๋ ๊ฒ์ด๋ฏ๋ก ์นด์ดํ ํด์ ๋ต์ ๊ตฌํ๋ค.
๊ฐ single digit์ ์ด์ ์ซ์์์ % 10์ ํ๊ณ , (์ด์ ์ซ์/ 10) % 10์ผ๋ก ๋ฐ๋ณตํด์ make_sum ํจ์์์ ๋ค์ ์ซ์(next)๋ฅผ ๊ตฌํด์คฌ๋ค.
์ฃผ์ํด์ผ ํ ์ ์, ์ ๊ณฑ๊ทผ์ pow๋ก ๊ตฌํ ๋ int ํ์ผ๋ก ํ๋ณํ์ ํด์ค์ผ ๋ง์๋ค๋ ๊ฒ์ ๋ฐ์ ์ ์๋ค.
๋ฐ๋ก
์
๋ ฅ1]
57 2
์ถ๋ ฅ1]
4
์
๋ ฅ2]
153 3
์ถ๋ ฅ2]
0
์
๋ ฅ3]
58 2
์ถ๋ ฅ3]
0
#include <stdio.h>
#include <deque>
#include <string>
#include <cmath>
using namespace std;
int make_num(int start, int P){
int temp=start;
int next=0;
for(int i=1; i<=to_string(start).length(); i++){
next += (int)pow(temp % 10, P);
temp /= 10;
}
return next;
}
void DFS(int start, deque<int> *D, int *P, int *visited){
if(++visited[start] == 3) return;
int next = make_num(start, *P);
DFS(next, D, P, visited);
}
int main(){
int A, P, count=0;
scanf("%d %d", &A, &P);
deque<int> D;
int visited[300000 + 1]={0,};
D[1] = A;
DFS(D[1], &D, &P, visited);
for(int n: visited){
if(n == 1) count++;
}
printf("%d", count);
}
[๋ฐฑ์ค(BOJ)] 11047๋ฒ: ๋์ 0 (Greedy Algorithm(๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ), C++) (0) | 2021.02.26 |
---|---|
[๋ฐฑ์ค(BOJ)] 9466๋ฒ: ํ ํ๋ก์ ํธ (DFS/BFS, C++) (0) | 2021.02.26 |
[๋ฐฑ์ค(BOJ)] 10451๋ฒ: ์์ด ์ฌ์ดํด (DFS/BFS, C++) (0) | 2021.02.25 |
[๋ฐฑ์ค(BOJ)] 1707๋ฒ: ์ด๋ถ ๊ทธ๋ํ (DFS/BFS, C++) (0) | 2021.02.25 |
[๋ฐฑ์ค(BOJ)] 11724๋ฒ: ์ฐ๊ฒฐ ์์์ ๊ฐ์ (DFS/BFS, C++) (0) | 2021.02.25 |