Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 안드로이드 구글맵
- Kotlin
- FLUTTER
- NDK
- RxJava
- android push
- C/C++
- UWP
- Android
- Django REST framework
- RxAndroid
- Android P
- mfc
- C
- 안드로이드
- 프로그래머스
- 코틀린
- kodility
- flutter firestore
- livedata
- Flutter TextField
- android architecture component
- Rxjava2
- Python
- Django REST
- Django REST Android
- 알고리즘
- C++
- Java
- dart
Archives
- Today
- Total
개발하는 두더지
[프로그래머스] 최소값 만들기 - Level 2 본문
https://programmers.co.kr/learn/challenge_codes/180
자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
예를 들어 A = [1, 2]
, B = [3, 4]
라면
- A에서 1, B에서 4를 뽑아 곱하여 더합니다.
- A에서 2, B에서 3을 뽑아 곱하여 더합니다.
수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다.
수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요.
package com.example.lib;
public class myClass {
public int getMinSum(int []A, int []B)
{
int answer = 0;
int len = A.length;
A = ascendingOrder(A);
B = descendingOrder(B);
for(int i = 0; i < len; i++) {
answer += (A[i] * B[i]);
}
return answer;
}
//bubble ascending sort
public int[] ascendingOrder(int[] Arr) {
int lastIndex = Arr.length;
while(lastIndex!=0){
for(int i = 0; i < lastIndex - 1; i++) {
int temp = Arr[i];
if(Arr[i] > Arr[i+1]) {
Arr[i] = Arr[i+1];
Arr[i+1] = temp;
}
}
lastIndex--;
}
return Arr;
}
//bubble descending sort
public int[] descendingOrder(int[] Arr){
int lastIndex = Arr.length;
while(lastIndex!=0){
for(int i = 0; i < lastIndex - 1; i++) {
int temp = Arr[i];
if(Arr[i] < Arr[i+1]) {
Arr[i] = Arr[i+1];
Arr[i+1] = temp;
}
}
lastIndex--;
}
return Arr;
}
public static void main(String[] args)
{
myClass test = new myClass();
int []A = {1,2};
int []B = {3,4};
System.out.println(test.getMinSum(A,B));
}
}
A, B 수열을 2X2, #X3, 4X4 형태로 만들어보았고 A의 가장 작은 원소가 B의 가장 큰 원소와 곱해져야 가장 작은 최소값을 얻는 것을 확인했다.
A, B를 Sort해야되는데 버블정렬로 오름차순, 내림차순을 구현해서 문제를 풀었는데 시간 복잡도가 O(n^2)이다. O(n^2) 보다 빠른 정렬 알고리즘을 사용해봐야겠다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 행렬의 곱셈 (0) | 2018.04.20 |
---|---|
좌표 압축 알고리즘 (0) | 2018.04.19 |
[HackerRank] Climbing the Leaderboard 알고리즘 풀이 (0) | 2018.04.14 |
삽입정렬, 선택정렬, 버블정렬 시간복잡도 O(n^2) 정렬 알고리즘 (0) | 2018.04.10 |
카카오 코딩테스트 1차 풀이 (0) | 2018.04.07 |
Comments