문제
https://www.acmicpc.net/problem/1009
첫번째 코드 - 실패
Math.pow(a,b)를 사용해서 정말 단순하게 a^b를 구한 뒤 %10으로 나머지 연산(모듈로 연산) 을 진행하려고 했지만 실패
package week9.baek.july7;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B1009 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String input = br.readLine();
int a = Integer.parseInt(input.split(" ")[0]);
int b = Integer.parseInt(input.split(" ")[1]);
long n = (long) Math.pow(a, b);
System.out.println("n = " + n);
System.out.println(n % 10);
}
}
}
너무 수가 커지기 때문에 이렇게 해서는 안된다.
💡새로운 접근 방법
어짜피 1의 자리수만 구하면 됐던 문제이다. 따라서 아무리 곱하는 연산을 해도 1의 자리만 기억해도 상관 없다!
따라서 다음과 같이 n을 구한다.
int n = 1;
for (int j = 0; j < b; j++) {
n *= a;
n %= 10;
}
💡 출력
10번 컴퓨터는 10을 출력해야 한다.
즉 모듈러 연산을 했을 때 0이 나오면 10을 출력하고 나머지는 그냥 n을 출력하게 하면 됨.
if(n == 0) System.out.println(10);
else System.out.println(n%10);
최종 코드
package week9.baek.july7;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B1009 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String input = br.readLine();
int a = Integer.parseInt(input.split(" ")[0]);
int b = Integer.parseInt(input.split(" ")[1]);
int n = 1;
for (int j = 0; j < b; j++) {
n *= a;
n %= 10;
}
if(n == 0) System.out.println(10);
else System.out.println(n%10);
}
}
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 | Java Silver V] (#10826) 피보나치 수 4 (0) | 2024.07.04 |
---|---|
[백준 | Java Silver IV] (#1269) 대칭 차집합 (0) | 2024.07.04 |
[백준 | Java Bronze II] (#3062) 수 뒤집기 (0) | 2024.07.03 |
[백준 | Java Bronze III] (#5622) 다이얼 (0) | 2024.06.26 |
[백준 | Java Bronze I] (#2869) 달팽이는 올라가고 싶다 (0) | 2024.06.25 |