<문제 제시>
컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들어간다. 검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다.
예를 들어 고유번호의 처음 5자리의 숫자들이 04256이면, 각 숫자를 제곱한 수들의 합 0+16+4+25+36 = 81 을 10으로 나눈 나머지인 1이 검증수이다.
<문제 해결 과정>
제곱을 구하는 함수를 활용하고, 그 값들을 누적합하여 마지막 검증수를 도출해내는 문제였다.
<Answer 1>
for(int i = 0; i < data.length; i++) {
sum += data[i] * data[i];
System.out.println(data[i] + "를 제곱하면 " + (data[i] * data[i]) + "지금까지 더해진 합 = " + sum);
}
int veri = sum % 10;
출력문으로 잘 진행되고있는지 과정을 확인하고, data[i] * data[i] 로 제곱을 구하는 방식이다.
<Answer 2>
for(int i = 0; i < data.length; i++) {
sum += Math.pow(data[i], 2);
System.out.println(data[i] + "를 제곱하면 " + (data[i] * data[i]) + "지금까지 더해진 합 = " + sum);
}
int veri = sum % 10;
Math.pow()함수를 통해 data[i]를 2제곱한 값을 구하는 방식이다.
<전체 코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class q_2475_verifiers {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int[] data = new int[5];
for(int i = 0; i < 5; i++) {
data[i] = Integer.parseInt(st.nextToken());
}
int sum = 0;
for(int i = 0; i < data.length; i++) {
sum += Math.pow(data[i], 2);
System.out.println(data[i] + "를 제곱하면 " + (data[i] * data[i]) + "지금까지 더해진 합 = " + sum);
}
int veri = sum % 10;
System.out.println(Arrays.toString(data));
System.out.println(veri);
}
}
Math.pow()함수의 활용과 '검증수'라는 개념을 알 수 있던 문제였다.
<문제 링크>
https://www.acmicpc.net/problem/2475
'Algorithms > 백준' 카테고리의 다른 글
[백준] '바구니 순서 바꾸기' - Java (0) | 2024.06.02 |
---|---|
[백준] '바구니 뒤집기' - Java (1) | 2024.06.02 |
[백준] '공 넣기' - Java (0) | 2024.06.01 |
[백준] '공 바꾸기' - Java (0) | 2024.06.01 |
[백준] '럭비 클럽' - Java (0) | 2024.06.01 |