728x90
코드 힌트
- 문제의 핵심:
- 주어진 배열의 인접한 두 원소 간의 차이를 계산하여, 이들 차이의 최대 공약수(GCD)를 구합니다.
- 이 GCD를 사용하여 배열의 원소들 사이의 가능한 모든 값을 체크하고, 누락된 값의 수를 계산합니다.
- 차이 배열 계산:
- 배열의 인접한 두 수의 차이를 계산하여 새로운 배열에 저장합니다.
- 예를 들어, 배열이 arr이라면 인접한 두 원소의 차이를 계산하여 diffArr에 저장합니다.
- 최대 공약수(GCD) 구하기:
- 차이 배열의 모든 요소의 GCD를 구합니다.
- GCD 계산에 필요한 두 매개변수를 사용하여 반복적으로 최대 공약수를 구합니다.
- 결과 계산:
- GCD를 사용하여 배열의 첫 번째 원소부터 시작해 GCD만큼 증가시켜 가며, 배열의 원소와 일치하는지 확인합니다.
- 일치하지 않는 값의 수를 카운트하여 결과를 도출합니다.
- GCD 계산 주의:
- 최대 공약수를 계산할 때 배열의 모든 요소에 대해 반복적으로 GCD를 구합니다. 이 과정에서 나누기를 반복하여 나머지가 0이 될 때까지 진행합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int result = 0;
int n = Integer.parseInt(in.nextLine()); // 입력받을 배열의 크기 n
int[] arr = new int[n]; // 입력된 수를 저장할 배열
int[] diffArr = new int[n-1]; // 인접한 수들 사이의 차이를 저장할 배열
// 배열 arr에 수를 입력받아 저장
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(in.nextLine());
}
// 인접한 두 수의 차이를 계산하여 diffArr에 저장
for (int i = 0; i < n-1; i++) {
diffArr[i] = arr[i+1] - arr[i];
}
// 차이 배열의 최대 공약수(GCD)를 계산
int gcd = gcd(diffArr);
// 결과를 계산하기 위한 인덱스와 카운터
int idx = 0;
for (int i = arr[0]; i <= arr[n-1]; i+=gcd) {
if (arr[idx] == i) {
idx++; // 현재 값이 배열의 원소와 일치하면 인덱스 증가
} else {
result++; // 일치하지 않으면 추가된 값을 카운트
}
}
// 결과 출력
System.out.println(result);
}
// 배열의 최대 공약수를 구하는 메소드
public static int gcd(int[] arr) {
int result = arr[0]; // 초기 최대 공약수는 배열의 첫 번째 요소
for (int i = 1; i < arr.length; i++) {
// 배열의 모든 요소와 현재 최대 공약수의 GCD를 계산
while (arr[i] > 0) {
int tmp = result;
result = arr[i];
arr[i] = tmp % arr[i];
}
}
return result;
}
}
728x90
'백준' 카테고리의 다른 글
[백준] 북극곰은 괄호를 찢어 (25918번) (1) | 2024.09.13 |
---|---|
[백준] 다음 소수 (4134번) (2) | 2024.09.04 |
[백준] 이항 계수 1 (11050번) (0) | 2024.08.30 |
[백준] 분해합 (2231번) (0) | 2024.08.27 |
[백준] 최소공배수 (1934번) (0) | 2024.08.26 |