Dolphins의 HelloWorld
[백준]Baekjoon2331(반복수열) 본문
문제 링크 : https://www.acmicpc.net/problem/2331
수열중에서 만약 새로 나온수가 이전에 나온수와 하나라도 같게되면 무조건 반복될 것이기 때문에
나는 일단 map함수를 사용하여 새로 나오는 수를 key, 누적 갯수를 value로 해서
수열의 숫자가 누적 갯수를 함께 가지고 있도록 하였다
그래서 만약 같은 숫자가 나온다면 그 숫자가 가지고있는 value에서 -1한 값을
결과값으로 내놓도록 하였다
#include <iostream> #include <map> using namespace std; int pow(int x, int p) { //각 자릿수를 p만큼 곱하도록 하는 함수 int ans = 1; for (int i = 0; i < p; i++) { ans = ans * x; } return ans; } int main() { map<int, int> m; //들어가는 숫자와 그 숫자까지의 갯수를 저장 int A; int P; int count = 1; int result; scanf("%d %d", &A, &P); m[A] = count++; while (1) { result = 0; while (A > 0) { //다음에 나올 수를 계산 result += pow(A % 10, P); A /= 10; } if (m[result] != 0) { //만약 map함수에 이미 그 수가 있다면 printf("%d\n", m[result] - 1); break; } else { //새로 나오는 수라면 m[result] = count++; A = result; } } }
'Algorithm > baekjoon문제풀이' 카테고리의 다른 글
[백준]Baekjoon2667(DFS,BFS) (0) | 2018.08.16 |
---|---|
[백준]Baekjoon9466(DFS,cycle) (0) | 2018.08.16 |
[백준]Baekjoon10451(DFS) (0) | 2018.08.15 |
[백준]Baekjoon1377(정렬) (0) | 2018.08.14 |
[백준]Baekjoon11004(정렬) (0) | 2018.08.12 |
Comments