문제 : boj1110
문제에서 요구하는 대로 구현을 하면 된다. 과정을 정리하면 다음과 같다.
제시된 대로 시뮬레이션 하면서 몇 회 진행됬는지 세기만 하면 되므로 별다른 알고리즘적인 지식은 필요없다. 일반적으로 숫자 그 자체로 연산해서 구하는 방법과, 문자열로 보고 구하는 방법이 있을 것이다. 이하 코드1과 코드2에 두 가지 방법을 모두 구현했으니 코드를 참고해서 구현해보자.
코드1 (정수로 구하기) : github
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int tmp = n;
int cnt = 0;
do {
cnt++;
int a = (tmp/10)%10;
int b = tmp%10;
tmp = b*10+(a+b)%10;
} while (tmp != n);
bw.write(cnt+"");
bw.flush();
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
코드2 (String으로 구하기) : github
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int in = Integer.parseInt(br.readLine());
String n = "";
if (in < 10)
n = "0" + in;
else
n+= in;
int cnt = 1;
String tmp = n.toString();
for(;;cnt++) {
tmp = method(tmp);
if (tmp.equals(n))
break;
}
bw.write(cnt + "\n");
bw.flush();
br.close();
bw.close();
}
private static String method(String n) {
int left = n.charAt(0) - '0';
int right = n.charAt(1) - '0';
int tmp = left + right;
if (tmp >= 10)
tmp %= 10;
return "" + right + tmp;
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 5591 - 最大の和 (boj java) (0) | 2022.05.12 |
---|---|
[자바] 백준 11880 - 개미 (boj java) (0) | 2022.05.11 |
[자바] 백준 2936 - 채식주의자 (boj java) (0) | 2022.05.10 |
[자바] 백준 8892 - 팰린드롬 (boj java) (0) | 2022.05.09 |
[자바] 백준 2480 - 주사위 세개 (boj java) (0) | 2022.05.09 |
댓글