[프로그래머스] Java 코딩테스트 - 최댓값 만들기(1) (Arrays.sort, stream API 사용)

yihyun·2025년 4월 2일

코딩테스트

목록 보기
31/105
post-thumbnail

최댓값 만들기(1)

✅ 문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

✅ 제한사항

0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100

🔽 소스코드 1 (Arrays.sort 오름차순 정렬 사용)

💻 풀이

  • Arrays.sort() 를 사용해 배열 속 숫자를 오름차순으로 정렬해준다.
  • 배열의 가장 마지막과 마지막 앞에 최대 수가 있으므로 length -1 / -2 로 큰 수 2개를 곱해 return 해 준다.

※ 내림차순을 사용하기 위해서는 int 배열을 List 로 만들어 줘야 하기 때문에 오름차순을 선택해주었다.

시간 0.33ms ~ 0.53ms

  import java.util.Arrays;
  
    public String solution(int[] numbers) {
        
    	Arrays.sort(numbers);
  		return numbers[numbers.length -1] * numbers[numbers.length -2];
    }

🔽 소스코드 2 (반복문 사용)

💻 풀이

  • 반복문을 사용해 배열을 순회해준다.
  • 만약 배열 속 값이 max1 보다 크다면 max1의 값을 max2로, num의 값을 max1에 넣어준다.

※ 만약 최대값이 2개 이상일 경우 max2에도 최대값이 갱신될 수 있도록 else if 를 사용해준다.

시간 0.02ms ~ 0.05ms

전체코드

  	public String solution2(int[] numbers) {
       
  		int max1 = 0;
  		int max2 = 0;
  
  		for(int num : numbers){
  			if(num > max1){
  				max2 = max1;
  				max1 = num;
  			}else if(num > max2){
  				max2 = num;
  			}
  		}
  		return max1 * max2;
    }

🔽 소스코드 3 (stream API 사용)

💻 풀이

  • Arrays.stream() : int 배열을 stream으로 변환해준다.
  • boxed() : int 를 Integer로 변환해준다.
  • sorted((a,b) -> b - a) : 내림차순으로 정렬해준다.
    a - b 는 오름차순!
  • limit(2) : 상위 2개의 값만 남겨준다.
  • mapToInt(Integer::intValue) : Integer 를 int로 변환해준다.
  • toArray() : 배열로 만들어 준다.
  • 최종적으로 배열의 0번 인덱스와 1번 인덱스를 곱해 return 한다.

시간 3.50ms ~ 10.96ms

전체코드

import java.util.Arrays;
    public String solution3(int[] numbers) {
       
  		int[] maxNum = Arrays.stream(numbers)
  							.boxed()
  							.sorted((a,b) -> b - a)
  							.limit(2)
  							.mapToInt(Integer::intValue)
  							.toArray();
  
  		return maxNum[0] * maxNum[1];
    }
profile
개발자가 되어보자

0개의 댓글