난이도: Bronze 3
프로그래밍 언어: Java
문제명: 분산처리
푼일자: 2021년 5월
주소: https://www.acmicpc.net/problem/1009
문제풀기
우선, 맨 처음 단순하게 이렇게 하면 될 것 같은데? 하고 푼게 아래와 같았습니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
for(int i = 0; i < count; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
int atOne = (int)Math.pow(a, b) % 10; // 제곱으로 만들어 1의 자리 가져오기
if(atOne == 0) atOne = 10; // 0은 10으로 치환
System.out.println(atOne);
}
sc.close();
}
|
cs |
입출력 예제대로 결과값을 확인하는데...
알고보니 터무니 없이 큰 값으로 Math.pow 가 제기능을 못한 것이였습니다.
다른식으로 접근해야 할 것 같습니다.
여러번 삽질한 결과 다음의 코드가 탄생하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
while(count-- != 0) {
int a = sc.nextInt();
int b = sc.nextInt();
int r = a;
for(int i = 2; i <= b; i++) r = (r*a) % 10;
if(r == 0) r = 10;
System.out.println(r);
}
sc.close();
}
|
cs |
설명 하자면, a가 3, b가 7이라고 할 때
a와 b를 곱해서 첫번째 자리의 수만 저장해두고 저장된 수에 a 를 b 회 계속 곱해주면 됩니다.
3 x 3 = 21 -> 1 x 3 = 3 -> 3 x 3 = 9 -> 9 x 3 -> 27 ..... 9 x 3 -> 27 ==== 7
이런 규칙이 생성되었습니다.
백준 문제에 있는 입출력 예제는 정확하게 출력이 되나 제출을 하면 지속적으로 "틀렸습니다" 라고 결과가 나왔습니다.
후... 도저히 이유는 모르겠으나
r = a 를 r = 1로, for(int i = 2; i <= b; i++) 를 for(int i = 0; i < b; i++) 로 고쳐서 성공 하였습니다.
너무 어렵습니다... 두번째 백준 ㅜㅜ
반응형