[Leetcode] 1464. 배열의 두 요소의 최대 곱

김엄지·2024년 5월 25일

알고리즘

목록 보기
88/90

1. 문제

문제 설명

정수 배열 nums가 주어졌을 때, 배열에서 두 개의 서로 다른 요소를 선택한 후 (nums[i] - 1) * (nums[j] - 1)의 최대 값을 찾아야 합니다.

제한사항

  • 2 <= nums.length <= 500
  • 1 <= nums[i] <= 10^3

입출력의 예

예시 1:
입력: nums = [3,4,5,2]
출력: 12
설명: 인덱스 i=1 및 j=2(0에서 인덱스됨)를 선택하면 최대값, 즉 (nums[1)을 얻게 됩니다. ]-1)(숫자[2]-1) = (4-1)(5-1) = 3*4 = 12.

예시 2:
입력: nums = [1,5,4,5]
출력: 16
설명: 인덱스 i=1과 j=3(0에서 인덱스됨)을 선택하면 (5-1)*(5-의 최대값을 얻게 됩니다. 1) = 16.

예시 3:
입력: nums = [3,7]
출력: 12


2. 풀이 과정

  1. 최대값을 가질 두 변수를 선언 후 초기화를 해준다.
  2. 반복문으로 배열 nums를 순회하면서 각 요소를 확안한다.
  3. 현재 요소 num이 firstMax 보다 크면, secondMax를 firstMax로 업데이트하고, firstMax를 num으로 업데이트 한다.
  4. 그렇지 않고 num이 secondMax보다 크면 secondMax를 업데이트 한다.
  5. 순회가 끝나면 문제에 맞게 반환을 해준다.

3. 최종 코드

class MaxProduct {
    public int maxProduct(int[] nums) {
        int firstMax = 0;
        int secondMax = 0;

        for (int num : nums) {
            if (num > firstMax) {
                secondMax = firstMax;
                firstMax = num;
            } else if (num > secondMax) {
                secondMax = num;
            }
        }
        return (firstMax - 1) * (secondMax - 1);
    }

    public static void main(String[] args) {
        MaxProduct product = new MaxProduct();
        int[] nums = {3, 4, 5, 2};
        int result = product.maxProduct(nums);

        System.out.println(result);
    }
profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글