h-i-s-t-o-r-y

[Java] 프로그래머스 - 두 개 뽑아서 더하기 본문

Algorithm

[Java] 프로그래머스 - 두 개 뽑아서 더하기

H' 2021. 7. 16. 11:15

https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;

class Solution {
    public int[] solution(int[] numbers) {    
    
        int[] answer = {};
        TreeSet<Integer> ts = new TreeSet<Integer>();
        for (int i = 0; i < numbers.length-1; i++) {
			for (int j = i+1; j < numbers.length; j++) {
				ts.add(numbers[i]+numbers[j]);
			}
		}//for
        
        answer = new int[ts.size()];
	    int i = 0;
	    for(int t : ts) {
	    	answer[i] = t;
	    	i++;
	    }//for
        
        return answer;
        
    }//sol
	
}//class
import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {                                                   
       // numbers 길이 2~100                                                  
       int maxSize = 0;                                                     
       for (int i = 1; i < 100; i++) {                                      
          maxSize+=i;                                                      
       }//for                                                               

       int [] answer= new int[maxSize];                                     
       Arrays.fill(answer, -1);      // 0+0 = 0이랑 구별                      
       int len = numbers.length;                                            
       int idx = 0;                                                         
       int sum;                                                             

       // 중복체크+합                                                            
       for (int i = 0; i < len-1; i++) {                                    
          for (int j = i+1; j < len; j++) {                                
             sum = 0;                                                     
             sum = numbers[i] + numbers[j];                               
             if (! isDuplicateCheck(answer, idx, sum) ) {                 
                answer[idx] = sum;                                       
                idx++;                                                   
             }//if                                                        
          }//for                                                           
       }//for                                                               


       // 기본값 (-1)의 개수                                                      
       int count = 0;                                                       
       for (int i : answer) {                                               
          if (i == -1) count++;                                            
       }//for                                                               

       // (-1)을 제외한 새로운 배열                                                  
       int [] newA = new int[answer.length-count];                          
       for (int i=0; i<newA.length; i++) {                                  
          newA[i]=answer[i];                                               
       }//for                                                               

       // 정렬                                                                
       // Arrays.sort(newAnswer);                                           
       sort(newA);                                                          

       return newA;                                                         

    }//sol                                                                   


	// 정렬 함수
    private static void sort(int[] newA) {                                   
       /*                                                                   
        * 배열.길이 6 총5번                                                       
        * i        j j  j  j  j                                            
        * 0       0 1 2 3 4     <5-i                                       
        * 1       0 1 2 3                                                  
        * 2       0 1 2                                                    
        * 3       0 1                                                      
        * 4       0                                                        
        * <5                                                                
        */                                                                  
       int len = newA.length;                                               
       for (int i = 0; i < ( len - 1 ); i++) {   //0~4                        
          for (int j = 0; j < ( len -1 - i ); j++) {                       
             if (newA[j]>newA[j+1]) {         //swap(...               
                int tmp = newA[j+1];                                     
                newA[j+1] = newA[j];                                     
                newA[j] = tmp;                                           
             }//if                                                        
          }//for                                                           
       }//for                                                               
    }                                                                        

	// 중복 체크 함수
    private static boolean isDuplicateCheck(int[] answer, int idx, int sum) {
       for (int i = 0; i <= idx; i++) {                                     
          if(answer[i]==sum) return true;                                  
       }                                                                    
       return false;                                                        
    }//isdup

}//class

 

 

Comments