728x90
코드 힌트
- 거리 계산:
- 각 원소와 기준값 n의 거리(절대값 차이)를 계산합니다. 이 거리 정보를 기반으로 원소를 정렬할 것입니다.
- 최소 거리 찾기:
- 두 개의 반복문을 사용하여 현재 원소의 거리와 최소 거리를 비교하고, 가장 가까운 원소를 찾습니다. 같은 거리를 가진 원소 중에서는 값이 큰 원소를 우선시합니다.
- 중복 방지:
- 이미 선택된 원소를 다시 처리하지 않도록 거리 배열의 값을 -1로 설정하여 중복을 방지합니다.
- 정렬 및 반환:
- 최종적으로 거리 기준으로 정렬된 원소들을 결과 배열에 저장하여 반환합니다.
정답은 더보기 클릭
더보기
class Solution {
public int[] solution(int[] numlist, int n) {
// 결과를 저장할 배열 생성
int[] result = new int[numlist.length];
// 각 원소와 기준값 n의 차이 절대값을 저장할 배열 생성
int[] distance = new int[numlist.length];
// 각 원소와 n의 차이를 절대값으로 계산하여 distance 배열에 저장
for (int i = 0; i < numlist.length; i++) {
distance[i] = Math.abs(n - numlist[i]);
}
int resultIndex = 0; // 결과 배열의 현재 인덱스
// 각 원소를 처리하여 결과 배열에 순서대로 추가
for (int i = 0; i < distance.length; i++) {
int minDis = Integer.MAX_VALUE; // 현재 최소 거리
int idx = -1; // 현재 최소 거리의 인덱스
// 거리 배열을 순회하여 최소 거리와 해당 인덱스를 찾기
for (int j = 0; j < distance.length; j++) {
if (distance[j] == -1) continue; // 이미 처리된 원소는 건너뛰기
// 현재 거리보다 작으면 업데이트
if (minDis > distance[j]) {
minDis = distance[j];
idx = j;
}
// 현재 거리와 같고, 해당 원소가 더 크면 업데이트
else if (minDis == distance[j] && numlist[idx] < numlist[j]){
minDis = distance[j];
idx = j;
}
}
// 선택된 원소의 거리를 -1로 설정하여 중복 방지
distance[idx] = -1;
result[resultIndex++] = numlist[idx]; // 결과 배열에 추가
}
return result; // 최종 결과 배열 반환
}
}
728x90
'프로그래머스(Java) > Level 0' 카테고리의 다른 글
[프로그래머스] 다항식 더하기 (0) | 2024.08.17 |
---|---|
[프로그래머스] 유한소수 판별하기 (0) | 2024.08.17 |
[프로그래머스] 저주의 숫자 3 (0) | 2024.08.17 |
[프로그래머스] 등수 매기기 (0) | 2024.08.16 |
[프로그래머스] 로그인 성공? (0) | 2024.08.16 |