[HackerRank] Minimum Distances

아르당·2023년 11월 29일
0

HackerRank

목록 보기
36/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

배열의 두 값 사이의 거리는 그 수 사이의 인덱스 값이다. 배열 a가 주어졌을 때, 배열 안에 동일한 값 사이의 최소 거리를 구해라. 만약 값이 없다면, -1을 반환해라.

Example

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이다.

Function Description

minimumDistances 함수를 완성해라.
minimumDistances 함수는 아래와 같은 매개변수를 가지고 있다.

  • int a[n]: 정수형 배열

Return

  • int: 최소 거리 또는 값이 일치하는 쌍이 없다면 -1

Constraints

  • 1 <= n <= 10^3
  • 1 <= a[i] <= 10^5

풀이

반복문과 정렬을 사용하면 쉽게 해결할 수 있다.
값이 일치하는 쌍의 거리를 담을 정수형 리스트를 생성한다.

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);
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글