✅ 문제

아래와 같이 숫자가 담긴 1차원 배열이 주어졌을 때,
두 개의 숫자를 뽑아 서로의 거리를 비교한 후 거리가 가장 작은 숫자의 위치(index)를 출력하시오.
✅ 코드
public class Main {
public static void main(String[] args) {
int[] point = { 92, 32, 52, 9, 81, 2, 68 };
int dist = 1000000000;
int[] result = new int[2];
for (int i = 0; i < point.length - 1; i++) {
for (int j = i + 1; j < point.length; j++) {
if (dist > Math.abs(point[i] - point[j])) {
dist = Math.abs(point[i] - point[j]);
result[0] = i;
result[1] = j;
}
}
}
System.out.println("result = [" + result[0] + ", " + result[1] + "]");
}
}
✅ 추론 과정
이 프로그램은 포인트 배열에서 두 인덱스 쌍을 찾아 그 차이가 최소가 되는 경우를 찾는 문제이다.
- 몇 가지 정수 값으로 point 배열을 초기화한다.
- 최소 차이를 저장할 변수 dist를 매우 큰 값으로 초기화한다.
- 크기가 2인 result 배열을 초기화하여 최소 차이를 가진 인덱스 쌍을 저장한다.
- 이중 for문으로 point 배열의 각 요소를 반복한다.
- 각 요소 쌍에 대해 절대 차이를 계산하고, 그 차이가 dist보다 작으면 dist 변수를 업데이트한다.
- result 배열에 담긴 요소들을 출력한다.
여기서 dist를 매우 큰 값으로 초기화하는 이유는 실제로 발생할 수 있는 최대 가능한 차이보다 큰 값으로 시작하면서, 이후에 차이를 찾을 때 해당 값과 비교하여 최소 차이를 갱신하려고 하기 위함이다. 이렇게 하면 프로그램이 실행되는 동안 차이를 갱신하는 과정에서 선택한 임의의 큰 값이 처음에 설정한 dist보다 작은 값으로 업데이트되어 최소 차이를 나타내게 된다.
아래는 결과를 담아줄 배열을 선언하지 않고 변수 a,b 에 결과값을 담아준 것이다.
조금 더 간단한 코드이다.
public class Main {
public static void main(String[] args) {
int[] point = { 92, 32, 52, 9, 81, 2, 68 };
int min = Math.abs(point[0]-point[1]);
int a = 0;
int b = 0;
for (int j = 0; j < point.length; j++) {
for (int i = 0; i < point.length; i++) {
if (j != i) {
if(Math.abs(point[j] - point[i]) < min) {
min = Math.abs(point[j] - point[i]);
a = j;
b = i;
}
}
}
}
System.out.println("result = [" + a + ", " + b + "]");
}
}
'코딩테스트 > JavaFestival(스마트인재개발원)' 카테고리의 다른 글
[자바페스티벌] 23번 - 2차원 배열을 왼쪽으로 90도 회전하여 출력하기 (1) | 2024.03.28 |
---|---|
[자바페스티벌] 22번 - 공백 포함 별찍기 (1) | 2024.03.27 |
[자바페스티벌] 20번 - 10진수 정수를 입력받아 2진수로 변환해서 출력하기 (0) | 2024.03.26 |
[자바페스티벌] 19번 - 단 수와 곱해지길 원하는 수 입력받아 구구단 출력하기 (0) | 2024.03.26 |
[자바페스티벌] 18번 - 중복이 없이 숫자를 뽑는 로또 프로그램 만들기 (1) | 2024.03.26 |
✅ 문제

아래와 같이 숫자가 담긴 1차원 배열이 주어졌을 때,
두 개의 숫자를 뽑아 서로의 거리를 비교한 후 거리가 가장 작은 숫자의 위치(index)를 출력하시오.
✅ 코드
public class Main { public static void main(String[] args) { int[] point = { 92, 32, 52, 9, 81, 2, 68 }; int dist = 1000000000; int[] result = new int[2]; for (int i = 0; i < point.length - 1; i++) { for (int j = i + 1; j < point.length; j++) { if (dist > Math.abs(point[i] - point[j])) { dist = Math.abs(point[i] - point[j]); result[0] = i; result[1] = j; } } } System.out.println("result = [" + result[0] + ", " + result[1] + "]"); } }
✅ 추론 과정
이 프로그램은 포인트 배열에서 두 인덱스 쌍을 찾아 그 차이가 최소가 되는 경우를 찾는 문제이다.
- 몇 가지 정수 값으로 point 배열을 초기화한다.
- 최소 차이를 저장할 변수 dist를 매우 큰 값으로 초기화한다.
- 크기가 2인 result 배열을 초기화하여 최소 차이를 가진 인덱스 쌍을 저장한다.
- 이중 for문으로 point 배열의 각 요소를 반복한다.
- 각 요소 쌍에 대해 절대 차이를 계산하고, 그 차이가 dist보다 작으면 dist 변수를 업데이트한다.
- result 배열에 담긴 요소들을 출력한다.
여기서 dist를 매우 큰 값으로 초기화하는 이유는 실제로 발생할 수 있는 최대 가능한 차이보다 큰 값으로 시작하면서, 이후에 차이를 찾을 때 해당 값과 비교하여 최소 차이를 갱신하려고 하기 위함이다. 이렇게 하면 프로그램이 실행되는 동안 차이를 갱신하는 과정에서 선택한 임의의 큰 값이 처음에 설정한 dist보다 작은 값으로 업데이트되어 최소 차이를 나타내게 된다.
아래는 결과를 담아줄 배열을 선언하지 않고 변수 a,b 에 결과값을 담아준 것이다.
조금 더 간단한 코드이다.
public class Main { public static void main(String[] args) { int[] point = { 92, 32, 52, 9, 81, 2, 68 }; int min = Math.abs(point[0]-point[1]); int a = 0; int b = 0; for (int j = 0; j < point.length; j++) { for (int i = 0; i < point.length; i++) { if (j != i) { if(Math.abs(point[j] - point[i]) < min) { min = Math.abs(point[j] - point[i]); a = j; b = i; } } } } System.out.println("result = [" + a + ", " + b + "]"); } }
'코딩테스트 > JavaFestival(스마트인재개발원)' 카테고리의 다른 글
[자바페스티벌] 23번 - 2차원 배열을 왼쪽으로 90도 회전하여 출력하기 (1) | 2024.03.28 |
---|---|
[자바페스티벌] 22번 - 공백 포함 별찍기 (1) | 2024.03.27 |
[자바페스티벌] 20번 - 10진수 정수를 입력받아 2진수로 변환해서 출력하기 (0) | 2024.03.26 |
[자바페스티벌] 19번 - 단 수와 곱해지길 원하는 수 입력받아 구구단 출력하기 (0) | 2024.03.26 |
[자바페스티벌] 18번 - 중복이 없이 숫자를 뽑는 로또 프로그램 만들기 (1) | 2024.03.26 |