문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
배열의 두 값 사이의 거리는 그 수 사이의 인덱스 값이다. 배열 a가 주어졌을 때, 배열 안에 동일한 값 사이의 최소 거리를 구해라. 만약 값이 없다면, -1을 반환해라.
a = [3, 2, 1, 2, 3]
값이 일치하는 두 개의 쌍 3과 2가 있다. 3의 인덱스는 i = 0과 j = 4이고, 거리는 d[i, j] = |j - i| = 4이다. 2의 인덱스는 i = 1과 j = 3이고, 거리는 d[i, j] = |j - i| = 2이다. 최소 거리는 2이다.
minimumDistances 함수를 완성해라.
minimumDistances 함수는 아래와 같은 매개변수를 가지고 있다.
반복문과 정렬을 사용하면 쉽게 해결할 수 있다.
값이 일치하는 쌍의 거리를 담을 정수형 리스트를 생성한다.
List<Integer> absMin = new ArrayList<>();
for문을 통해 매개변수로 주어진 a 배열을 순회한다. 이때 중첩 for를 사용해 쌍이 되는 것을 찾는다.
for(int i = 0; i < a.size() - 1; i++){
for(int j = i + 1; j < a.size(); j++){
// Reference value를 비교하기 때문에 equals 사용
if(a.get(i).equals(a.get(j))){
absMin.add(Math.abs(i - j));
}
}
}
거리를 담은 리스트의 사이즈가 0이면 페어가 없기 때문에 -1을 반환한다.
if(absMin.size() == 0){
return -1;
}
그리고 임의로 들어가 있는 거리 리스트를 정렬하고, 가장 작은 값을 반환한다.
absMin.sort(Comparator.naturalOrder());
return absMin.get(0);
public static int minimumDistances(List<Integer> a) {
List<Integer> absMin = new ArrayList<>();
for(int i = 0; i < a.size() - 1; i++){
for(int j = i + 1; j < a.size(); j++){
if(a.get(i).equals(a.get(j))){
absMin.add(Math.abs(i - j));
}
}
}
if(absMin.size() == 0){
return -1;
}
absMin.sort(Comparator.naturalOrder());
return absMin.get(0);
}