코딩 문제들을 풀면서 컴퓨팅 사고를 길러야겠다는 생각이 들어서 무작정 백준에 들어가서 일단 브론즈 문제부터 풀어보기로 했다.
그런데 처음부터 막히고 마는데...
만약 a가 3 b가 4라면?
3x3x3x3 =27 이라서 7번 컴퓨터가 되겠다.
그런데 b의 조건에 있는 숫자가 너무 커져서 조치를 취하지 않고는 int로 계산할 수가 없다...
그래서 고민을 했는데.... 어차피 필요한 것은 a^b의 1의 자리수뿐이라는 생각이 들었다.
이 1의 자리수만 구할 방법이 없을까 생각했는데, StringTokenizer 을 사용하면 된다는 것을 알게 되었다.
StringTokenizer이란?
- 사용자가 지정하는 구분자를 경계로 하여 문자열을 나눠주는 Class이다.
- 만약 사용자가 구분자 지정을 생략하면 공백이나 탭이 기본 구분자로 사용된다.
https://tragramming.tistory.com/35
문자열을 나누어 주는 클래스이기에 Scanner가 아닌 BufferedReader를 사용한다.
사실 이런 이유가 아니더라도 속도차이가 커서 코딩 문제를 자바로 풀 때는 BufferedReader를 많이들 사용하는 것 같다.
굉장히 친절하게 설명해준 블로그가 있어서 링크 올려놓고...
이하 코드 :
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();
}
}
설명은 주석으로 달아서 생략!
규칙성을 구하는게 예전에 적성검사 풀던 때가 생각나는...ㅎㅎ
'Study > 알고리즘' 카테고리의 다른 글
백준 1037번 - 약수 JAVA (0) | 2022.07.25 |
---|---|
백준 1100번 - 하얀 칸 JAVA (0) | 2022.07.24 |
JAVA 백준 알고리즘 단계별로 풀어보기 - 3 (0) | 2022.05.30 |
JAVA 백준 알고리즘 단계별로 풀어보기 - 2 (0) | 2022.05.23 |
JAVA 백준 알고리즘 단계별로 풀어보기 - 1 (0) | 2022.05.15 |