프로그래머스 문제풀이(최솟값 만들기)with JAVA

mikseoo·2020년 3월 30일
0

오늘도 시간이 나서 프로그래머스 코딩문제를 하나 풀어보았다.
문제 내용은 다음과 같다.

최솟값 만들기

최솟값 만들기라는 문제이다. 처음 봤을때부터 간단해 보였다. 두개의 배열이 주어지고 두 배열의 원소를 서로 곱해서 answer이라는 변수에 누적 저장해서 answer값이 최소가 되는 값을 구하면 되는 문제이다.

<문제 풀이 계획>

  1. 한 배열은 오름차순, 나머지 배열은 내림차순으로 정렬한다.
  2. 배열의 크기는 서로 같으므로 인덱스0부터 끝까지 차례대로 곱한다.
  3. 곱한값을 answer변수에 누적 저장한다.

정말 간단하다. 별다른 풀이 방식을 요하지 않는다. 그래서 바로 작성을 해보았다.

class Solution
{
   public static int solution(int []A, int []B)
		    {
		        int answer = 0;
		        min_arr(A);
		        max_arr(B);
		        for(int i=0;i<A.length;i++) {
		        	//차례대로 곱한후 누적 저장한다.
		        		answer=answer+(A[i]*B[i]);
		        	
		        }
		        System.out.println(answer);

		        return answer;
		    }
		//오름차순 정렬 클래스
		 static int[] min_arr(int[] A) {
			 int min=A[0];
			for(int i=0;i<A.length;i++) {
				for(int j=i+1;j<A.length;j++) {
				if(A[i]<A[j]) {
					min=A[i];
					A[i]=A[j];
					A[j]=min;
					
				}}
			}
			return A;
		 }
         //내림차순정렬 클래스
		 static int[] max_arr(int[] A) {
			 int max=A[0];
			for(int i=0;i<A.length;i++) {
				for(int j=i+1;j<A.length;j++) {
				if(A[i]>A[j]) {
					max=A[i];
					A[i]=A[j];
					A[j]=max;
					
				}}
			}
			return A;
		 }
		 
}
  • 오름차순 정렬 클래스와 내림차순 정렬 클래스를 따로 만들어서 앞서 말한 방법으로 간단하게 구현했다.

결과는 기본 테스트는 문제없이 다 통과 했지만 효율성 테스트를 통과하지 못했다.

그래서 정렬 클래스를 따로 만들지 말고 Arrays.sort()를 사용하려고 한다.

Arrays.sort(배열)하게되면 오름차순 정렬이된다.

하지만 내림차순 정렬은 없다. 그래서 둘다 오름차순으로 정렬을 해서 한 배열은 배열의 뒤에서 부터 곱하는 식으로 코드를 짜보았다.

import java.util.*;
class Solution
{
   	 public 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=answer+(A[i]*B[A.length-i-1]);
		        	
		        }
		        System.out.println(answer);

		        return answer;
		    }
}

통과 하였다. Array.sort()에서 오름차순 정렬밖에 없길래 내림차순으로 정렬하는 법을 찾아보고 했는데 너무 복잡했다. list에 추가를 해줘야하는게 많았다. 하지만 생각의 전환을 하니 엄청 쉽게 해결이 됬다.

이전에 대학교에서 창의력(?)관련된 수업을 들었는데 창의력해결 방법중에 거꾸로 생각하기라는 게 있었는데 오늘 문제가 딱 그랬던거 같다.

일단 안풀리면 거꾸로 생각해보자!

profile
초보 개발자 블로그

0개의 댓글