본문 바로가기

코딩테스트/Baekjoon

[JAVA] 백준 1009번: 분산처리

< 문제 >

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으로 해주는 처리가 필요하다. 

 

✍🏻 느낀점

 

문제만 대충 보고 함수 쓸 생각을 하지 말고, 항상 데이터의 범위를

고려하면서 코딩을 하는 습관을 가져야겠다고 생각했다.

그리고 예외의 경우가 있으니 항상 문제를 꼼꼼히 읽어야겠다.