일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 노마드코더 강의
- 경제공부
- React.js
- 달빛클럽
- Array
- 카카오블라인드코딩테스트
- 리액트
- SWEA
- Algorithm
- 달빛캠퍼스
- 재귀
- HashMap
- Stack
- 프로그래머스
- BOJ
- programmers
- 노마드코더
- JPA
- 인플레이션에서 살아남기
- 달빛클럽 1기
- 백준
- 달빛클럽1기
- React
- SoftwareExpertAcademy
- 완전탐색
- Java
- dfs
- ReactJS로 영화 웹 서비스 만들기
- 알고리즘
- 자바
- Today
- Total
th42500의 TIL
[Java] 연습문제 - 최솟값 만들기 (Lv2) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
💡 포인트
1️⃣ 최종적으로 누적된 최솟값이 적기 위해서는 작은 수 * 큰 수를 누적해야 함
1️⃣ 첫번째 시도
❓ 풀이과정
👉 배열 A를 오름차순으로 정렬, 배열 B를 Integer배열로 변환하여 내림차순으로 정렬한 후 각 배열의 동일 인덱스
값끼리 곱하여 누적
❗ 결과
👉 정확성 테스트에 있어서는 모두 통과했으나 효율성 테스트 1번에서 시간 초과
✔ 소스코드
import java.util.Arrays;
import java.util.Collections;
public class Solution { // 최솟값 만들기
public static void main(String[] args) {
// int[] A = { 1, 4, 2 };
// int[] B = { 5, 4, 4 };
int[] A = {1, 2};
int[] B = {3, 4};
System.out.println(solution(A, B));
}
private static int solution(int[] A, int[] B) {
int answer = 0;
Arrays.sort(A);
Integer[] b = Arrays.stream(B).boxed().toArray(Integer[]::new);
Arrays.sort(b, Collections.reverseOrder());
for(int i=0; i<A.length; i++) {
answer += A[i] * b[i];
}
return answer;
}
}
2️⃣ 두번째 시도
❓ 풀이과정
👉 배열 A와 배열 B 모두 오름차순으로 정렬한 후 A와 B 배열 인덱스를 거꾸로 진행시키며 곱하여 누적
❗ 결과
👉 테스트 통과
✔ 소스코드
import java.util.Arrays;
public class Solution { // 최솟값 만들기
public static void main(String[] args) {
// int[] A = { 1, 4, 2 };
// int[] B = { 5, 4, 4 };
int[] A = {1, 2};
int[] B = {3, 4};
System.out.println(solution(A, B));
}
private static int solution(int[] A, int[] B) {
int answer = 0;
Arrays.sort(A);
Arrays.sort(B);
for(int i=0; i<A.length; i++) {
answer += A[i] * B[B.length - i - 1];
}
return answer;
}
}
비록 간단한 문제를 틀렸지만, 덕분에 int형 배열은 Collections.reverseOrder()을 이용하여 내림차순으로 정렬할 수 없고 이는 String이나 Object배열만 가능하다는 것을 알게되었다.
또한, int 배열을 내림차순으로 정렬하기 위해서는 다음과 같이 Integer형 배열로 변환 후 Collections.reverseOrder()을 이용하여 정렬할 수 있다는 것 또한 알게 되었다.
Integer[] change = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(change, Collections.reverseOrder());
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 연습문제 - N개의 최소공배수 (Lv2) (0) | 2022.08.03 |
---|---|
[Java] 2020 KAKAO BLIND RECRUITMENT - 괄호 변환 (Lv2) (0) | 2022.08.03 |
[Java] 2021 Dev-Matching: 웹 백엔드 개발(상반기) - 행렬 테두리 회전하기 (Lv2) (0) | 2022.08.03 |
[Java] 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 (Lv2) (0) | 2022.08.03 |
[Java] 연습문제 - 최댓값과 최솟값 (Lv2) (0) | 2022.08.02 |