Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
[프로그래머스][Java][Lv.0] 가까운 수 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120890
내가 푼 풀이
- 정렬은 성능을 저하시켜서, 사용하지 않기 위해 최솟값을 2번 활용했습니다.
- 대신 정렬을 안써서 30ms정도 속도를 줄일 수 있었습니다.
public class Solution {
public int solution(int[] array, int n) {
int absMin = 100; // 절대값 최소값 구하기 위한 초기화
int numMin = 100; // 최소값 구하기 위한 초기화
// 절대값 최솟값 찾기
for (int i = 0; i < array.length; i++) {
int temp = Math.abs(n - array[i]);
if (absMin >= temp) {
absMin = temp;
}
}
// 절대값 최소값과 같은 절대값을 가지면서 더 작은 숫자 찾기
for (int findNum : array) {
int abs = Math.abs(n - findNum);
if (absMin == abs && numMin > findNum) {
numMin = findNum;
}
}
return numMin;
}
}
테스트 1 〉 | 통과 (0.09ms, 75.1MB) |
테스트 2 〉 | 통과 (0.03ms, 75.8MB) |
테스트 3 〉 | 통과 (0.04ms, 74.1MB) |
테스트 4 〉 | 통과 (0.02ms, 76.9MB) |
테스트 5 〉 | 통과 (0.03ms, 78.1MB) |
테스트 6 〉 | 통과 (0.04ms, 77.3MB) |
테스트 7 〉 | 통과 (0.03ms, 73MB) |
테스트 8 〉 | 통과 (0.03ms, 75.8MB) |
테스트 9 〉 | 통과 (0.03ms, 72.1MB) |
테스트 10 〉 | 통과 (0.03ms, 73.2MB) |
테스트 11 〉 | 통과 (0.03ms, 76MB) |
테스트 12 〉 | 통과 (0.03ms, 75.1MB) |
테스트 13 〉 | 통과 (0.02ms, 75MB) |
테스트 14 〉 | 통과 (0.03ms, 83.4MB) |
테스트 15 〉 | 통과 (0.03ms, 76.4MB) |
테스트 16 〉 | 통과 (0.03ms, 70.1MB) |
테스트 17 〉 | 통과 (0.03ms, 73.2MB) |
테스트 18 〉 | 통과 (0.02ms, 77MB) |
다른 사람 풀이 1
- 정렬과 최솟값을 사용해서 푼 방식입니다.
- 확실히 정렬을 한다고 하니까 가독성이 더 좋은 것 같습니다.
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;
}
}
테스트 1 〉 | 통과 (0.47ms, 71MB) |
테스트 2 〉 | 통과 (0.53ms, 79.2MB) |
테스트 3 〉 | 통과 (0.47ms, 76.5MB) |
테스트 4 〉 | 통과 (0.54ms, 75.2MB) |
테스트 5 〉 | 통과 (0.34ms, 73MB) |
테스트 6 〉 | 통과 (0.40ms, 69.9MB) |
테스트 7 〉 | 통과 (0.41ms, 72.3MB) |
테스트 8 〉 | 통과 (0.36ms, 71.1MB) |
테스트 9 〉 | 통과 (0.45ms, 75.9MB) |
테스트 10 〉 | 통과 (0.34ms, 72.6MB) |
테스트 11 〉 | 통과 (0.36ms, 76.1MB) |
테스트 12 〉 | 통과 (0.52ms, 76.7MB) |
테스트 13 〉 | 통과 (0.49ms, 90.4MB) |
테스트 14 〉 | 통과 (0.32ms, 67.1MB) |
테스트 15 〉 | 통과 (0.36ms, 80.5MB) |
테스트 16 〉 | 통과 (0.31ms, 69.7MB) |
테스트 17 〉 | 통과 (0.30ms, 72.5MB) |
테스트 18 〉 | 통과 (0.34ms, 75.3MB) |
다른 사람 풀이 2
- 스트림으로 푼건데, 언젠가 스트림은 공부하긴 하겠지만.. 성능도 for문보다 낮은데 왜 스트림을 쓰는지 이해 못하겠습니다.
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))]);
}
}
테스트 1 〉 | 통과 (5.51ms, 77.2MB) |
테스트 2 〉 | 통과 (4.31ms, 71.5MB) |
테스트 3 〉 | 통과 (7.00ms, 75.1MB) |
테스트 4 〉 | 통과 (6.28ms, 77.2MB) |
테스트 5 〉 | 통과 (4.55ms, 75.1MB) |
테스트 6 〉 | 통과 (5.28ms, 78.4MB) |
테스트 7 〉 | 통과 (3.09ms, 74.8MB) |
테스트 8 〉 | 통과 (4.74ms, 79.2MB) |
테스트 9 〉 | 통과 (4.52ms, 82.2MB) |
테스트 10 〉 | 통과 (3.06ms, 77.4MB) |
테스트 11 〉 | 통과 (3.19ms, 76.7MB) |
테스트 12 〉 | 통과 (3.11ms, 77.4MB) |
테스트 13 〉 | 통과 (4.48ms, 77.6MB) |
테스트 14 〉 | 통과 (4.15ms, 78.2MB) |
테스트 15 〉 | 통과 (3.75ms, 70.1MB) |
테스트 16 〉 | 통과 (4.28ms, 77.8MB) |
테스트 17 〉 | 통과 (3.51ms, 73.9MB) |
테스트 18 〉 | 통과 (3.11ms, 76.2MB) |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java][Lv.0] 문자열 뒤집기 (0) | 2023.08.30 |
---|---|
[프로그래머스][Java][Lv.0] 숨어있는 숫자의 덧셈(2) (0) | 2023.08.30 |
[프로그래머스][Java][Lv.0] 1로 만들기 (0) | 2023.08.29 |
[프로그래머스][Java][Lv.0] 글자 지우기 (0) | 2023.08.29 |
[프로그래머스][Java][Lv.0] k의 개수 (0) | 2023.08.25 |