Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
[프로그래머스][Java][Lv.2] 최솟값 만들기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12941
풀이 설명
각 배열의 값을 곱해서 누적한 것 중에 제일 작은 최솟값을 찾아야 하므로, A는 오름차순, B는 내림차순으로 만들어줌
- 왜냐하면 [1,4,2],[5,4,4] 라는 배열이 있다고 가정했을때, 각 배열의 큰 값끼리 곱한다면 최솟값이 안나옴
- int[]배열 내림차순할때 stream쓰려고 했으나 시간초과로 실패함, 그래서 Stream안하고 For문으로 내림차순했음
- 그리고 정렬된 배열들을 곱해서 누적함
import java.util.*;
class Solution {
public int solution(int []A, int []B) {
int answer = 0;
int len = A.length;
Arrays.sort(A); // 오름차순
Arrays.sort(B); // 내림차순용 세팅
for (int i = 0; i < len / 2; i++) {
int temp = B[i];
B[i] = B[len - i - 1];
B[len - i - 1] = temp;
}
for (int i = 0; i < len; i++) {
answer += A[i] * B[i];
}
return answer;
}
}
정확성 테스트
테스트 1 〉 | 통과 (0.37ms, 72.6MB) |
테스트 2 〉 | 통과 (0.41ms, 76.3MB) |
테스트 3 〉 | 통과 (0.38ms, 72MB) |
테스트 4 〉 | 통과 (0.38ms, 76.3MB) |
테스트 5 〉 | 통과 (0.38ms, 73.6MB) |
테스트 6 〉 | 통과 (0.42ms, 72.4MB) |
테스트 7 〉 | 통과 (0.46ms, 76.4MB) |
테스트 8 〉 | 통과 (0.36ms, 78.4MB) |
테스트 9 〉 | 통과 (0.38ms, 78.6MB) |
테스트 10 〉 | 통과 (0.40ms, 72.4MB) |
테스트 11 〉 | 통과 (0.36ms, 79.4MB) |
테스트 12 〉 | 통과 (0.43ms, 75.1MB) |
테스트 13 〉 | 통과 (0.36ms, 77.7MB) |
테스트 14 〉 | 통과 (0.39ms, 77.4MB) |
테스트 15 〉 | 통과 (0.38ms, 76.5MB) |
테스트 16 〉 | 통과 (0.37ms, 77.9MB) |
효율성 테스트
테스트 1 〉 | 통과 (1.45ms, 52.3MB) |
테스트 2 〉 | 통과 (1.93ms, 52.3MB) |
테스트 3 〉 | 통과 (1.31ms, 52.6MB) |
테스트 4 〉 | 통과 (1.58ms, 52.4MB) |
Stream을 사용했을 경우 결과 (시간초과)
import java.util.*;
class Solution {
public int solution(int []A, int []B){
int answer = 0;
int len = A.length;
Arrays.sort(A);
Integer[] BInteger = Arrays.stream(B).boxed().toArray(Integer[]::new);
Arrays.sort(BInteger, Collections.reverseOrder());
for (int i = 0; i < len; i++) {
answer += A[i] * BInteger[i];
}
return answer;
}
}
정확성 테스트
테스트 1 〉 | 통과 (3.13ms, 76.7MB) |
테스트 2 〉 | 통과 (4.54ms, 78.5MB) |
테스트 3 〉 | 통과 (4.18ms, 75.5MB) |
테스트 4 〉 | 통과 (3.72ms, 73.6MB) |
테스트 5 〉 | 통과 (4.05ms, 77.3MB) |
테스트 6 〉 | 통과 (4.52ms, 74.3MB) |
테스트 7 〉 | 통과 (3.98ms, 76.4MB) |
테스트 8 〉 | 통과 (2.63ms, 73.3MB) |
테스트 9 〉 | 통과 (2.88ms, 75.8MB) |
테스트 10 〉 | 통과 (3.46ms, 77.7MB) |
테스트 11 〉 | 통과 (3.69ms, 86.4MB) |
테스트 12 〉 | 통과 (2.59ms, 76MB) |
테스트 13 〉 | 통과 (2.77ms, 78.4MB) |
테스트 14 〉 | 통과 (2.44ms, 64.9MB) |
테스트 15 〉 | 통과 (2.79ms, 67.6MB) |
테스트 16 〉 | 통과 (2.68ms, 73MB) |
효율성 테스트
테스트 1 〉 | 통과 (6.94ms, 52.4MB) |
테스트 2 〉 | 실패 (시간 초과) |
테스트 3 〉 | 통과 (4.65ms, 53.3MB) |
테스트 4 〉 | 실패 (시간 초과) |
Stream 안쓰고 Int[] 내림차순하기
Stream을 사용하려고 했던 이유는, int[]을 내림차순시 사용할때 Collections.reverseOrder()에 Integer[]만 가능하기 때문이다.
Comparator<? super T> T는 제네릭 클래스로 어떠한 객체를 받아오게 되어있다. 하지만 Int는 Primitive 타입이라 허용되지 않는다.
Arrays.stream(B).boxed().toArray(Integer[]::new);
그래서 int타입 배열을 Integer 배열 boxing(Primitive자료형 -> Wrapper 클래스)로 형변환을 해주었다.
하지만 이렇게 Stream을 사용할 경우 성능이 느려지기 때문에 for문을 사용해서 내림 차순 하는 방법을 알아봤다.
Arrays.sort(B); // 내림차순용 세팅
for (int i = 0; i < len / 2; i++) {
int temp = B[i];
B[i] = B[len - i - 1];
B[len - i - 1] = temp;
}
다른 사람 코드
오름차순을 내림차순으로 변경하지 않고 바로 B[len - 1 - i]을 이용해서 간결하게 풀었다.
import java.util.*;
class Solution {
public int solution(int []A, int []B) {
int answer = 0;
int len = A.length;
Arrays.sort(A);
Arrays.sort(B);
for (int i = 0; i < len; i++) {
answer += A[i] * B[len - 1 - i];
}
return answer;
}
}
정확성 테스트
테스트 1 〉 | 통과 (0.35ms, 67.3MB) |
테스트 2 〉 | 통과 (0.41ms, 75.9MB) |
테스트 3 〉 | 통과 (0.64ms, 85.3MB) |
테스트 4 〉 | 통과 (0.50ms, 70.5MB) |
테스트 5 〉 | 통과 (0.42ms, 74.3MB) |
테스트 6 〉 | 통과 (0.61ms, 71.6MB) |
테스트 7 〉 | 통과 (0.44ms, 73.1MB) |
테스트 8 〉 | 통과 (0.43ms, 70.2MB) |
테스트 9 〉 | 통과 (0.52ms, 66.4MB) |
테스트 10 〉 | 통과 (0.43ms, 78.2MB) |
테스트 11 〉 | 통과 (0.38ms, 70.7MB) |
테스트 12 〉 | 통과 (0.40ms, 76.2MB) |
테스트 13 〉 | 통과 (0.55ms, 71.5MB) |
테스트 14 〉 | 통과 (0.42ms, 84.5MB) |
테스트 15 〉 | 통과 (0.38ms, 73.6MB) |
테스트 16 〉 | 통과 (0.39ms, 71.5MB) |
효율성 테스트
테스트 1 〉 | 통과 (2.50ms, 52.8MB) |
테스트 2 〉 | 통과 (1.97ms, 52.7MB) |
테스트 3 〉 | 통과 (1.87ms, 52.2MB) |
테스트 4 〉 | 통과 (1.82ms, 52.6MB) |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java][Lv.2] 더 맵게 (1) | 2023.11.17 |
---|---|
[프로그래머스][Java][Lv.0] 배열의 원소 삭제하기 (0) | 2023.10.24 |
[프로그래머스][Java][Lv.1] 모의고사 (0) | 2023.10.04 |
[프로그래머스][Java][Lv.1] 최소 직사각형 (0) | 2023.10.04 |
[프로그래머스][Java][Lv.1] k번째 수 (0) | 2023.10.04 |