티스토리 뷰
keyword : Big
difficulty : 중
completion : ✅
notice :
67. 분산처리
📝 문제
재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
출력
각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.
예제 입력 1
5
1 6
3 7
6 2
7 100
9 635
예제 출력 1
1
7
6
1
9
🔍 정답
<오답>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int input = Integer.parseInt(br.readLine());
int result;
for (int i=0; i<input; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
BigDecimal bi = new BigDecimal(Math.pow(a, b));
BigDecimal c = new BigDecimal("10");
System.out.println(bi);
System.out.println(c);
result = bi.remainder(c).intValue();
System.out.println(result);
}
}
}
<정답>
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 input = Integer.parseInt(br.readLine());
for (int i = 0; i < input; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int result = 1;
for (int j = 0; j < b; j++) {
result = (result * a) % 10;
}
if (result != 0) {
System.out.println(result);
} else System.out.println(10);
}
}
}
- 기본 풀이는 정수 a의 b제곱으로 나온 수를 10으로 나눈 나머지의 값을 구하면 마지막 데이터가 처리되는 컴퓨터의 번호를 알 수 있다.
- 5 % 10 = 5 이므로 5번 컴퓨터, 12 % 10 = 2 이므로 2번 컴퓨터, 10 % 10 = 0 으로, 0이 나오면 10을 출력하도록 하면 된다.
- 처음에는 Math.pow를 이용하려고 하였다. Math.pow는 double형이고 7 100처럼 큰 수가 나올 수 있어서 BigDecimal 을 사용하였는데 BigDecimal 범위를 벗어나기도 하였고 계산도 정확하지 않은 것 같았다.
- 23의 3승과 같은 경우 23 * 23 * 23으로 23 / 529 / 12,167 이런 식으로 계산이 되고 23의 일의자리만 계산하면 3 * 3 * 3 해서 3 / 9 / 27 이 나온다.
- 우리가 필요한 것은 일의자리이므로 일의자리만 b만큼 곱해도 같은 결과를 얻을 수가 있다.
- 따라서, b만큼 반복하면서 a의 일의자리를 계속 곱해주고 결과가 0이면 10을 출력하면 된다!
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 단어의 개수(백준1152번) (0) | 2022.10.12 |
---|---|
[알고리즘] 상수(백준2908번) (0) | 2022.10.11 |
[알고리즘] 더하기 사이클(백준 1110번) (0) | 2022.10.04 |
[알고리즘] 단어공부(백준 1157번) (1) | 2022.10.03 |
[자바] 알고리즘 풀이를 위한 입출력 체계 정리 (0) | 2022.09.17 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JavaScript
- SQL
- 리액트
- 자바
- 타입스크립트
- Comparator
- DP
- 자바bfs
- Queue
- CS
- 해시맵
- Nest
- 정렬
- Spring
- 스프링부트
- java
- 프로그래머스
- 자바스크립트
- SQLD
- 알고리즘
- JPA
- 자바dp
- 스프링
- Algorithm
- BFS
- dfs
- 이분탐색
- 자바트리
- 백준
- 형변환
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함