문제
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
제한사항
- 1 ≤ array의 길이 ≤ 100
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
입출력 예
입출력 예
array | n | result |
[3, 10, 28] | 20 | 28 |
[10, 11, 12] | 13 | 12 |
입출력 예 설명
입출력 예 #1
- 3, 10, 28 중 20과 가장 가까운 수는 28입니다.
입출력 예 #2
- 10, 11, 12 중 13과 가장 가까운 수는 12입니다.
코드
class Solution {
public int solution(int[] array, int n) {
int answer = 1000;
int sub = 100; //n과의 거리가 현재 가장 가까운 값
int temp = 0;
for(int i = 0; i < array.length; i++)
{
temp = array[i] - n; //n과의 거리
if(temp < 0) //음수이면 양수로 바꾸기 위해
{
temp*=-1; // Math.abs(arr[i] - i); 로 대체 가능합니다.
}
if(temp < sub) // 현재 n과의 거리가 기존의 거리보다 가까우면
{
sub = temp;
answer = array[i]; // n과 가까운 값 저장
}
else if(temp == sub && answer > array[i]) // n과의 거리가 동일할 경우 더 작은 값을 저장
{
sub = temp;
answer = array[i];
}
}
return answer;
}
}
풀이
정렬 쓰기 싫었고, Math 쓰기 싫어서 이렇게 했습니다.
풀이 방법은 주석을 보시면 아시겠지만
주어진 정수(n)과 가장 가까운 수를 찾아야합니다.
그렇기때문에
배열(array)에 저장된 값을 주어진 정수(n)과 뺀 값이
sub(현재 가장 가까운 거리)보다 작으면
그 값을 sub으로 저장 및 비교하면서
가장 가까이 있는 수를 찾아줍니다.
이때 주의점 2가지
1. n보다 배열에 작으면(arr[i] < n)
뺄때 음수가 나오니까 양수로 바꿔줍시다.
(-2 보다 1이 더 가깝지만, -2 < 1 이기 때문에)
2. 가장 가까운 수가 여러개 일때, 더 작은 수를 출력해야 합니다.
해결 방안
1. 음수라면 -1을 곱해서 양수로 만들어줍니다.
temp = array[i] - n; //n과의 거리
if(temp < 0) //음수이면 양수로 바꾸기 위해
{
temp*=-1; // Math.abs(arr[i] - i); 로 대체 가능합니다.
}
2. sub이 동일할때 더 작은 수를 저장합니다.
if(temp == sub && answer > array[i]) // n과의 거리가 동일할 경우 더 작은 값을 저장
{
sub = temp;
answer = array[i];
}
728x90
'프로그래머스 > Lv.0' 카테고리의 다른 글
프로그래머스 > 동적계획법(Dynamic Programming) > 정수 - JAVA (0) | 2023.06.01 |
---|---|
코딩테스트 연습 > 연속된 수의 합 - JAVA (0) | 2023.01.17 |
프로그래머스 > 코딩테스트 입문 > 소인수분해 - JAVA (0) | 2022.12.29 |
프로그래머스 > 코딩테스트 입문 > 최댓값 만들기 (2) - JAVA (0) | 2022.12.23 |
프로그래머스 > 구슬을 나누는 경우의 수 - JAVA (2) | 2022.12.23 |