📑 1. 문제설명

💡 2. 풀이과정
n과 가장 가까운 수를 구하려면 n에서 해당 요소를 뺀 값이 제일 작아야 한다고생각했다.
즉 `n - array[i]` 의 절대값이 0이거나 가장 작은 것을 구하는 접근 방식을 취했다.
처음에는 n - array[i] 이 현재 min 에 저장된 최소값보다 작으면
최소값을 min에, 해당 요소의 배열 index를 answer 변수에 업데이트 하는 방식으로 풀었다.
하지만 코드가 예상대로 돌아가지 않았다.
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
int min = Math.abs(n - array[0]);
int answer = 0;
for(int i = 1 ; i < array.length; i++) {
if (Math.abs(n - array[i]) < min ); {
Math.abs(n - array[i]);
answer = i;
}
}
return answer;
}
}

내가 쓴 코드는 결과 값으로 인덱스(answer)를 반환하기 때문에 틀린 것 같다.
`return answer`을 `return array[answer]` 로 변환하고 테스트 코드를 돌리니까 통과

근데 답안 제출 하니까 다른 테스트 케이스에서 다 틀림..
정확도 27.8로 틀렸다고 함... 니다..

👨💻 3. 정답코드
문제 제한사항에 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 하라는 조건이 있었다.
차이가 같은 경우 더 작은 값을 선택하도록 하는 코드를 추가해서 해결했다.
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
// n과 배열 첫번째 요소의 차이의 절대값으로 설정
int min = Math.abs(n - array[0]);
// 처음에는 배열 첫번째 값으로 설정
int answer = array[0];
for(int i = 1 ; i < array.length; i++) {
int minus = Math.abs(n - array[i]); // n - array[i] 의 절대값
// 절대값이 더 작은 경우
if (minus < min) {
min = minus; // 더 작은 차이로 갱신
answer = array[i]; // 해당 값 변수에 넣기
} else if (minus == min ){ // 차이 같으면 더 작은 값 선택
answer = Math.min(answer, array[i]);
}
}
return answer;
}
}
👏🏻 4. 좋아요 가장 많이 받은 코드
가장 간단하고 깔끔한 코드
import java.util.*;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
Arrays.sort(array);
for(int i = 1 ; i < array.length ; i++){
if(Math.abs(n-array[0]) > Math.abs(n-array[i])){
array[0] = array[i];
}
}
answer = array[0];
return answer;
}
}
스트림 장인
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] array, int n) {
return Math.min(array[Arrays.stream(array).map(operand -> Math.abs(n - operand)).boxed().collect(Collectors.toList()).indexOf(Arrays.stream(array).map(operand -> Math.abs(n - operand)).min().orElse(0))], array[Arrays.stream(array).map(operand -> Math.abs(n - operand)).boxed().collect(Collectors.toList()).lastIndexOf(Arrays.stream(array).map(operand -> Math.abs(n - operand)).min().orElse(0))]);
}
}
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 신고 결과 받기 문제 풀이 (2) | 2025.04.02 |
---|---|
[프로그래머스] (Java) 369게임 문제풀이 (16) | 2025.03.31 |
[프로그래머스] (Java) 삼각형의 완성조건(1) 문제풀이 (4) | 2025.03.31 |
[프로그래머스] (Java) 중복된 문자 제거 문제풀이 (2) | 2025.03.31 |
[프로그래머스] (Java) 배열 원소의 길이 문제풀이 (8) | 2025.03.30 |
📑 1. 문제설명

💡 2. 풀이과정
n과 가장 가까운 수를 구하려면 n에서 해당 요소를 뺀 값이 제일 작아야 한다고생각했다.
즉 n - array[i]
의 절대값이 0이거나 가장 작은 것을 구하는 접근 방식을 취했다.
처음에는 n - array[i] 이 현재 min 에 저장된 최소값보다 작으면
최소값을 min에, 해당 요소의 배열 index를 answer 변수에 업데이트 하는 방식으로 풀었다.
하지만 코드가 예상대로 돌아가지 않았다.
import java.util.Arrays; class Solution { public int solution(int[] array, int n) { int min = Math.abs(n - array[0]); int answer = 0; for(int i = 1 ; i < array.length; i++) { if (Math.abs(n - array[i]) < min ); { Math.abs(n - array[i]); answer = i; } } return answer; } }

내가 쓴 코드는 결과 값으로 인덱스(answer)를 반환하기 때문에 틀린 것 같다.
return answer
을 return array[answer]
로 변환하고 테스트 코드를 돌리니까 통과

근데 답안 제출 하니까 다른 테스트 케이스에서 다 틀림..
정확도 27.8로 틀렸다고 함... 니다..

👨💻 3. 정답코드
문제 제한사항에 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 하라는 조건이 있었다.
차이가 같은 경우 더 작은 값을 선택하도록 하는 코드를 추가해서 해결했다.
import java.util.Arrays; class Solution { public int solution(int[] array, int n) { // n과 배열 첫번째 요소의 차이의 절대값으로 설정 int min = Math.abs(n - array[0]); // 처음에는 배열 첫번째 값으로 설정 int answer = array[0]; for(int i = 1 ; i < array.length; i++) { int minus = Math.abs(n - array[i]); // n - array[i] 의 절대값 // 절대값이 더 작은 경우 if (minus < min) { min = minus; // 더 작은 차이로 갱신 answer = array[i]; // 해당 값 변수에 넣기 } else if (minus == min ){ // 차이 같으면 더 작은 값 선택 answer = Math.min(answer, array[i]); } } return answer; } }
👏🏻 4. 좋아요 가장 많이 받은 코드
가장 간단하고 깔끔한 코드
import java.util.*; class Solution { public int solution(int[] array, int n) { int answer = 0; Arrays.sort(array); for(int i = 1 ; i < array.length ; i++){ if(Math.abs(n-array[0]) > Math.abs(n-array[i])){ array[0] = array[i]; } } answer = array[0]; return answer; } }
스트림 장인
import java.util.Arrays; import java.util.stream.Collectors; class Solution { public int solution(int[] array, int n) { return Math.min(array[Arrays.stream(array).map(operand -> Math.abs(n - operand)).boxed().collect(Collectors.toList()).indexOf(Arrays.stream(array).map(operand -> Math.abs(n - operand)).min().orElse(0))], array[Arrays.stream(array).map(operand -> Math.abs(n - operand)).boxed().collect(Collectors.toList()).lastIndexOf(Arrays.stream(array).map(operand -> Math.abs(n - operand)).min().orElse(0))]); } }
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 신고 결과 받기 문제 풀이 (2) | 2025.04.02 |
---|---|
[프로그래머스] (Java) 369게임 문제풀이 (16) | 2025.03.31 |
[프로그래머스] (Java) 삼각형의 완성조건(1) 문제풀이 (4) | 2025.03.31 |
[프로그래머스] (Java) 중복된 문자 제거 문제풀이 (2) | 2025.03.31 |
[프로그래머스] (Java) 배열 원소의 길이 문제풀이 (8) | 2025.03.30 |