TIL 2023-01-24 항해99 D+16

황원준·2023년 1월 24일

hanghae99

목록 보기
16/24

1. 문제점

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

  • 제한사항
    -> 0 ≤ numbers의 원소 ≤ 10,000
    -> 2 ≤ numbers의 길이 ≤ 100

2. 시도 해본 것들

import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
             
        int result = 0;
        
        Arrays.sort(numbers);
        
        result = numbers[numbers.length - 1] * numbers[numbers.length - 2];
                
        return result;
    }
}

문제는 Arrays메서드인 오름차순 정렬로 배열을 정렬시키는 메서드 sort()를 이용하여 배열의 마지막 인덱스 와 이전 인덱스를 가지고와 곱하는 식을 세워서 풀었는데 처음에 했던 생각은 for문을 이용하여 배열의 원소들을 직접 가지고 오는것 이었다. 계속 풀 수는 있을 거 같은데 for문 안 if문에 조건식을 어떤식으로 세울지가 계속 머리속에 남았다.

3. 해결법

알고리즘 코테 스터디 모임에서 이 문제에 해결법을 푼 사람이 있었다.

class Solution {
    public int solution(int[] numbers) {
       
       int answer = 0;
        int max = 0 ;
        int secMax = 0;
        int idx = 0;
        for (int i = 0; i < numbers.length; i++) {
            if(numbers[i]>max) {
                max = numbers[i];
                idx = i;
            }
        }
        for (int i = 0; i < numbers.length; i++) {
            if(numbers[i]>secMax && i!=idx) secMax=numbers[i]; // 이 부분에서 막혀서 계속 안나왔다
        } 
        answer=max*secMax;
        return answer;
    }
}

저기서 인덱스라는 변수로 선언해서 만들고 최대값인 해당하는 배열의 인덱스를 제외하는 그런 조건식을 생각을 못했다.

4. 알게 된 점

내가 처음에 했던 생각도 맞았고 내가 풀었던 방법도 맞았다. 코테에 자신감? 이라는게 생긴거 같고 좀 더 창의적인 생각도 해봄직 하겠다. 다양한 풀이방법도 배우고 다른 사람이 어떤 방식으로 풀었는지 보는것도 하나의 배움인 거 같다.

profile
좋은 개발자가 되기 위해 노력 하는 개린이

0개의 댓글