https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
/*
양쪽 배열에서 각각 가장 작은 값을 고르고 가장 큰값을 고르면 된다.
사실 수학적 증명은 완벽하진 않다. 그래도 맞는 것 같다.
*/
/*
배열 A는 오름차순, 배열 B는 내림차순으로 정렬한다.
첫 요소부터 순서대로 배열 A는 최솟값, 배열 B는 최댓값이다.
둘을 곱해서 더하면 된다.
*/
import java.util.*;
class Solution
{
public int solution(int []A, int []B)
{
/* 첫번째 풀이*/
// Arrays.sort(A);
// Integer[] tmp = Arrays.stream(B).boxed().toArray(Integer[]::new);
// Arrays.sort(tmp, Comparator.reverseOrder());
// int answer = 0;
// for(int i=0;i<A.length;i++){
// answer += A[i]*B[i];
// }
// return answer;
/* 첫번째 풀이는 효율성 테스트 통과 실패다.
다른방법으로 다시 풀어보자.
*/
/* 두번째 풀이 */
Arrays.sort(A);
Arrays.sort(B);
int answer = 0;
for(int i=0;i<A.length;i++){
answer += A[i]*B[B.length-1-i];
}
return answer;
}
}
첫 풀이에서 Arrays.sort() 에서 분명 내림차순을 지원할 것으로 생각하고 찾아보고 풀어봤다.
그 과정에서 Java 공식문서에서 sort(T[] a, Comparator<? super T> c) 에 두번째 파라미터로 Comparator 를 사용할 수 있는 것을 확인했고 Comparator.reverseOrder() 를 넣어줬다.
하지만 에러가 발생했고 이는 기본타입의 배열일 경우 Object 타입을 상속하는 Wrapper 클래스로 박싱해줘야 Comparator 를 사용할 수 있다는 것을 알았다.
실행결과는 효율성 테스트 실패였다. 처음 봤다.
그래서 Arrays.sort() 를 사용하면 안되는 건지, 더 빠른 정렬인 Quick Sort 등을 구현해야 하는 건지, 고민이 많았고
질문하기를 조금 참고하다보니 굳이 B배열을 내림차순으로 처리할 필요가 없다는 것을 깨달았다.
인덱스를 조금만 다르게 조작하면 되는 것이었다.
그 이후 통과하였다.
총 시간은 30분정도 걸린 것 같다.
'알고리즘 > 문제' 카테고리의 다른 글
| [프로그래머스] lv2 이진변환 반복하기 / JAVA (0) | 2023.02.22 |
|---|---|
| [프로그래머스] Lv2 올바른 괄호 / JAVA (0) | 2023.02.21 |
| <다시풀기성공>[프로그래머스] lv2 JadenCase문자열만들기 / Java (0) | 2023.02.19 |
| [프로그래머스] Lv2 최댓값과 최솟값 / JAVA (0) | 2023.02.18 |
| <다시풀기성공>[프로그래머스] lv2 귤고르기 / JAVA (0) | 2023.02.17 |
