반응형
Notice
Recent Posts
Recent Comments
Link
It's easy, if you try
[백준/boj] 2331: 반복수열 (Java) / 구현 본문
반응형
문제
풀이
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int A;
static int P;
static List<Integer> D = new ArrayList();
public static void main(String[] args) throws Exception {
st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
P = Integer.parseInt(st.nextToken());
D.add(A);
makeD(A, P);
System.out.println(D2.size()-1);
}
private static void makeD(int a, int p) {
while (true) {
int total = 0;
while (a > 0) {
total += Math.pow(a % 10, p);
a /= 10;
}
if (D.contains(total)) {
for (int i = D.size() - 1; i >= 0; i--) {
if (D.get(i) == total) {
break;
}
D.remove(i);
}
break;
}
D.add(total);
a = total;
}
}
}
- 숫자 각 자리의 P 제곱의 덧셈을 알고 싶다면 아래의 코드를 쓰면 된다.
int total = 0;
while (a > 0) {
total += Math.pow(a % 10, p);
a /= 10;
}
위의 과정을 a = 327 , p= 2로 설명해보자면
1. Math.pow( 327 % 10 = 7 (일의자리) , 2) = 49
2. a < == 327 /10 = 32 (일의 자리 제거)
3. Math.pow( 32 % 10 = 2 (십의 자리), 2) = 4
4. a <== 32 / 10 = 3 (십의 자리 제거)
5. Math.pow(3 % 10 = 3(백의 자리), 2) = 9
6. a <== 3/ 10 = 0 (백의 자리 제거, while문 조건(a > 0) 부합 ==> while문 종료)
total 은 49 + 4+ 9 = 62 가 된다.
- D[0] 은 A 로 초기화 하고, total 이 구해질때 마다 D에 해당 값이 반복되는지 확인한다. (contains 로 확인)
- 반복 된다면 해당 값 인덱스가 될때까지 탐색하며 뒤에서부터 remove 한다. 해당 값 인덱스를 만나면 종료하고, D 배열의 size -1 (해당 값을 포함하면 안되기 때문) 을 반환한다.
- 반복 되지 않는다면 D에 추가한다.
반응형
'알고리즘 > 자바(Java)' 카테고리의 다른 글
[백준/boj] 9663: N-Queen (Java) / 백트래킹 (0) | 2021.02.25 |
---|---|
[백준/boj] 20055: 컨베이어 벨트 위의 로봇 (Java) / 구현 / 시뮬레이션 (0) | 2021.02.23 |
[백준/boj] 1629: 곱셈 (Java) / 분할정복 (0) | 2021.02.21 |
[백준/boj] 2615: 오목 (Java) / 브루트포스 / 구현 (3) | 2021.02.21 |
[백준/boj] 7576: 토마토 (Java) / BFS (0) | 2021.02.19 |
Comments