BaekJoon1009 - 분산처리
[Java] BaekJoon1009 - 분산처리
총 데이터의 개수는 항상 A의 B제곱의 형태로 들어오게 된다.
A | B | 제곱 결과 | 예제 결과 |
---|---|---|---|
1 | 6 | 1^6 = 1 | 1 |
3 | 7 | 3^7 = 2187 | 7 |
6 | 2 | 6^2 = 36 | 6 |
7 | 100 | 7^100 = 3234(이하생략)1 | 1 |
9 | 635 | 9^635 = (이하생략)9 | 9 |
위의 표는, 예제의 입력 값을 계산한 결과와 예제 결과를 비교 한 표이다. 제곱 결과의 끝자리 수가 예제 결과에 입력된 것을 볼 수 있다.
숫자를 표현하는 것에 한계가 있기 때문에, 곱할때 마다 %10
을 한 결과를 얻어 문제를 풀 수 있었다.
단, 문제 내에서 10번 컴퓨터가 존재하기 때문에, 결과가 0이 나올 경우 10번 컴퓨터로 갈 수 있도록 if문을 넣어주었다.
-
Scanner를 이용하여 처음 풀었을 당시의 코드:
import java.util.Scanner; public class BaekJoon1009 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int t = scanner.nextInt(); for (int i = 0; i < t; i++) { int answer = 1; int a = scanner.nextInt(); int b = scanner.nextInt(); for (int j = 0; j < b; j++) { answer = (answer * a) % 10; if (answer == 0) { answer = 10; } } System.out.println(answer); } scanner.close(); } }
메모리 크기나 시간을 보면, 전혀 효율적이지 않은 결과가 나왔다.
-
BufferedReader와 StringTokenizer 를 조합하여 변경 한 코드:
import java.io.*; import java.util.StringTokenizer; class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i < t; i++) { StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int a = Integer.parseInt(stringTokenizer.nextToken()); int b = Integer.parseInt(stringTokenizer.nextToken()); System.out.println(result(a,b)); } bufferedReader.close(); } public static int result(int a, int b) { int answer = 1; for (int j = 0; j < b; j++) { answer = (answer * a) % 10; if (answer == 0) { answer = 10; } } return answer; } }
-
Scanner를 사용 했던 부분을 모두 BufferedReader로 변경하였고, 결과를 반환하는 for문 부분은 result메소드에 따로 분류 해, 코드를 조금 더 간결하게 변경 해 보았다.
걸린 시간이나 메모리 부분에서 나아진 모습을 볼 수 있었다.
-