반응형

[Silver III] 2 타워 - 10407
성능 요약
메모리: 14280 KB, 시간: 104 ms
분류
수학, 정수론
문제 설명
2 타워의 높이 H는222⋅⋅⋅2\[2^{2^{2^{\cdot^{\cdot^{\cdot 2}}}}}\]에서 숫자 2가 나타나는 횟수로 정의된다. 2 타워의 값은 해당 표현식의 값으로 정의된다. 예를 들어, 높이 1의 2 타워 값은 2이고, 높이 2의 2 타워 값은 4이며, 높이 4의 2 타워 값은2222=65536\[2^{2^{2^{2}}} = 65536\]이므로 높이 5의 2 타워 값은 265536이며 이 값은 2003...6736이고 다 쓰기에는 여백이 부족하다.
H의 값이 커짐에 따라 2 타워의 값이 너무 커지므로, 우리는 이 값을 3으로 나눈 나머지만이 궁금하다.
입력
입력의 첫째 줄에 높이 H가 주어진다. (1 ≤ H ≤ 10100)
출력
첫째 줄에 높이가 H인 2 타워의 값을 3으로 나눈 나머지를 출력하라.
풀이
H가 1일 때만 나머지가 2고, 그 외에는 모두 1이 나온다.
다만 H의 범위가 크기 때문에 BigInteger를 사용해주어야 한다.
코드
import java.io.*;
import java.math.BigInteger;
import java.util.*;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
BigInteger H = new BigInteger(st.nextToken());
if (H.equals(BigInteger.ONE)) {
bw.write("2\n");
} else {
bw.write("1\n");
}
bw.flush();
bw.close();
br.close();
}
}반응형