썬키의 개발노트
[JAVA-120890] 가까운 수 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
링크를 클릭하면 해당 문제로 이동합니다.
1. 접근하기
이 문제 역시 난이도가 레벨 0에 수렴하는데 푸는데에 거의 한 시간 가량 걸렸던 문제이다.
우선, 매개변수로 주어진 n과 가장 가까운 정수를 반환하는게 문제이므로 배열의 각 원소에서 n을 뺀 결과를
절대값으로 변환한 다음, 각 원소들끼리의 그 절대값을 비교하면 되겠다고 생각했다.
TO-DO |
1) 배열의 각 원소에서 n을 뺀 결과를 절대값으로 변환하고, 그 절대값을 담을 int 타입의 변수(tmp) 만들기 |
2) tmp와 min 값을 비교해서 min값보다 작으면 min값에 tmp값을 계속 저장하기 |
2. 풀이
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
int tmp = 0;
int min = Integer.MAX_VALUE;
for (int i = 0; i < array.length; i++) {
tmp = Math.abs(n - array[i]);
if (tmp < min) {
min = tmp;
answer = array[i];
}
}
return answer;
}
}
3. 결과
4. 리뷰
우선, 30분정도는 코드를 어떻게 짜야할지 노트에 적어보느라 시간을 보냈고
20분은 원했던 결과가 안나와서 해결하려고 시간을 보냈다.
왜 5번째 테스트 케이스에서 오류가 날까?
곰곰히 생각해보니 문제에서 주어진 제한사항을 지키지 않아서 였던거 같다.
이 제한사항에 맞게 출력하려면, 배열을 오름차순으로 정렬해주면 되겠다고 생각해서
Arrays 클래스의 sort 메소드를 이용해서 배열을 정렬한 다음, for문을 돌렸더니 잘 실행되었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA-120902] 문자열 계산하기 (0) | 2023.01.30 |
---|---|
[JAVA-120896] 한 번만 등장한 문자 (0) | 2023.01.19 |
[JAVA-120846] 합성수 찾기 (0) | 2023.01.18 |
[JAVA-120815] 피자 나눠 먹기(2) (0) | 2023.01.18 |
[JAVA-120844] 배열 회전시키기 (0) | 2023.01.18 |