Study/알고리즘

백준 1009번 - 분산처리 JAVA

토기발 2022. 7. 23. 22:10

코딩 문제들을 풀면서 컴퓨팅 사고를 길러야겠다는 생각이 들어서 무작정 백준에 들어가서 일단 브론즈 문제부터 풀어보기로 했다. 

그런데 처음부터 막히고 마는데...

 


 

만약 a가 3 b가 4라면?

3x3x3x3 =27 이라서 7번 컴퓨터가 되겠다.

그런데 b의 조건에 있는 숫자가 너무 커져서 조치를 취하지 않고는 int로 계산할 수가 없다...

그래서 고민을 했는데.... 어차피 필요한 것은 a^b의 1의 자리수뿐이라는 생각이 들었다. 

이 1의 자리수만 구할 방법이 없을까 생각했는데, StringTokenizer 을 사용하면 된다는 것을 알게 되었다.

 

StringTokenizer이란? 

 

  • 사용자가 지정하는 구분자를 경계로 하여 문자열을 나눠주는 Class이다.
  • 만약 사용자가 구분자 지정을 생략하면 공백이나 탭이 기본 구분자로 사용된다.

https://tragramming.tistory.com/35

 

 

문자열을 나누어 주는 클래스이기에 Scanner가 아닌 BufferedReader를 사용한다.

사실 이런 이유가 아니더라도 속도차이가 커서 코딩 문제를 자바로 풀 때는 BufferedReader를 많이들 사용하는 것 같다.

굉장히 친절하게 설명해준 블로그가 있어서 링크 올려놓고...

https://st-lab.tistory.com/41

 

 

이하 코드 : 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	 
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int t = Integer.parseInt(br.readLine()); //테스트케이스 개수, 문자열로 불러오기 때문에 형변환 해야한다
        
        int a , b, r;
        for(int i = 0; i < t; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine()); //문자를 나눠주는 클래스, 공백을 기준으로 나눠준다
            
            a = Integer.parseInt(st.nextToken()); //StringTokenizer 클래스 객체에서 다음 토큰을 읽는것
            b = Integer.parseInt(st.nextToken()); //공백 다음 숫자
            
            r = 1;
            for(int j = 0; j < b; j++) {
                r = (r * a) % 10;  //10으로 나눠서 제곱한 값의 1의 자리만을 곱하게 한다   
            }
            if(r == 0) {
                System.out.println(10); //나머지가 0인 경우에는 10번 컴퓨터
            }else {
                System.out.println(r); 
            }
        }
        br.close();
 
    }
 
}

 

설명은 주석으로 달아서 생략!

규칙성을 구하는게 예전에 적성검사 풀던 때가 생각나는...ㅎㅎ