문제출처 : https://www.acmicpc.net/problem/2331
1. 문제요약
- D[1] = A
D[n] = D[n-1]의 각 자릿수의 숫자를 P번 곱한 수들의 합
- A = 57, P = 2일 때,
{57, 74(5^2 + 7^2 = 25 + 49), 65, 61, 37, 58, 89, 145, 42, 20, 4, 16, 37, ...}
여기서 {57, 74, 65, 61}을 제외한 숫자는 반복된다.
- 1 <= A <= 1,000
- 1 <= P <= 5
- 반복되지 않는 숫자의 개수는?
2. 접근방법
- 두 가지를 생각해 봤는데
1) V[num] = cnt
2) V[cnt] = num
- 1) 방법은 해당 특정 숫자가 몇번째 인지 저장해서 한번 방문했던 숫자를 재 방문하면 해당 cnt를 리턴
num이 얼마나 커질지 모름....
- 2) 방법은 cnt에 num을 가지고 있음
배열의 크기는 최대 1000을 넘지 않지만
해당 숫자가 이전에 있었는지를 연산 후에 매번 확인해줘야함.
3. 시간복잡도
- 1)은 O(N) : 1,000
- 2)는 O(N^2) : 1,000,000
4. 회고
- 난 1)번 방법으로 풀긴했는데 음... 2)번 방법이 좀 더 확실할 것같다.
1)번은 배열 크기를 알 수가 없으므로
소스코드 : 1)번 방법
[출처 : BOJ, 문제에 대한 모든 권리는 BOJ(acmicpc.net, startlink)에 있음]
'먹고살려면 > boj' 카테고리의 다른 글
BOJ 9466 텀 프로젝트 (0) | 2018.02.06 |
---|---|
BOJ 14891 톱니바퀴 (0) | 2018.02.05 |
BOJ 10451 순열 사이클 (0) | 2018.01.30 |
BOJ 1707 이분 그래프 (0) | 2018.01.29 |
BOJ 11724 연결 요소의 개수 (0) | 2018.01.26 |