< 문제 >
https://www.acmicpc.net/problem/1009
1009번: 분산처리
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class p1009 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb=new StringBuilder();
int t=Integer.parseInt(br.readLine()); //테스트 케이스 개수
for(int i=0;i<t;i++) {
StringTokenizer st=new StringTokenizer(br.readLine());
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
int answer=1;
for(int j=1;j<=b;j++) {
answer=answer*a%10; //계속 뒷자리만 구하는 식으로 해야 데이터 범위를 넘지 않아서 정확한 값이 나옴, Math.pow 사용하면 무조건 초과
}
if(answer==0) //마지막 숫자가 0일 경우
answer=10; //컴퓨터 번호는 10
sb.append(answer).append("\n");
}
System.out.print(sb);
}
}
✏️ 오답 노트
1. 처음에 Math.pow ( ) 함수를 사용해서 계산을 끝낸 후, 결괏값의 맨 끝 숫자만 출력하면 된다고 생각했다.
( 데이터의 범위를 고려하지 않음, 이상한 값 출력)
ex) 7의 100 제곱은 3.23...e+84 라는 수가 나온다.
=> 계산할 때, %10을 해주면 뒷자리만 구할 수 있어
계산이 더욱 간단해지고, 데이터 범위를 초과하지 않는다.
2. 맨 끝자리가 0인 경우를 고려하지 않았다.
=> 0일 경우, 컴퓨터의 번호를 10으로 해주는 처리가 필요하다.
✍🏻 느낀점
문제만 대충 보고 함수 쓸 생각을 하지 말고, 항상 데이터의 범위를
고려하면서 코딩을 하는 습관을 가져야겠다고 생각했다.
그리고 예외의 경우가 있으니 항상 문제를 꼼꼼히 읽어야겠다.
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[JAVA] 백준 18429번: 근손실 (1) | 2024.03.11 |
---|---|
[JAVA] 백준 1966번: 프린터 큐 (1) | 2024.03.08 |
[JAVA] 백준 1212번: 8진수 2진수 (0) | 2024.01.11 |
[JAVA] 백준 1075번: 나누기 (2) | 2024.01.09 |
[JAVA] 백준 1032번: 명령 프롬프트 (1) | 2024.01.08 |