본문 바로가기

공부, 알고리즘/LeetCode (리트코드)

[리트코드/JAVA] 1822. Sign of the Product of an Array

leetcode.com/problems/sign-of-the-product-of-an-array/

 

Sign of the Product of an Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

# 문제설명

There is a function signFunc(x) that returns:

  • 1 if x is positive.
  • -1 if x is negative.
  • 0 if x is equal to 0.

You are given an integer array nums. Let product be the product of all values in the array nums.

Return signFunc(product).

 

signFunc(x) 함수는 다음을 반환합니다. 

  • 양수는 1
  • 음수는 -1
  • 0은 0

정수 배열 nums가 있습니다. nums배열의 값을 모두 곱한 것을 product라 할 때 signFunc(product)를 구하세요.

 

# 제한사항

  • 1 <= nums.length <= 1000
  • -100 <= nums[i] <= 100

# 입출력 예

Example 1:

Input: nums = [-1,-2,-3,-4,3,2,1]

Output: 1

Explanation: The product of all values in the array is 144, and signFunc(144) = 1

 

Example 2:

Input: nums = [1,5,0,2,-3]

Output: 0

Explanation: The product of all values in the array is 0, and signFunc(0) = 0

 

Example 3:

Input: nums = [-1,1,-1,1,-1]

Output: -1

Explanation: The product of all values in the array is -1, and signFunc(-1) = -1

 

# 풀이

class Solution {
  public int arraySign(int[] nums) {
    int output = 0;
    int isOdd = 0;

    for(int i : nums) {

      if(i == 0) return 0;
      else if(i < 0) isOdd++;

    }

    if(isOdd % 2 != 0) output = -1;
    else output = 1;

    return output;
  }
}

 

 

#3, 4
최종 값을 반환할 변수(output)와 음수의 개수를 세어 줄 변수(isOdd)를 선언합니다.

#6
for문을 선언해서 nums배열의 값을 확인합니다.

#8
우선 배열의 값이 하나라도 0이면 전체 수를 곱한 값은 0이기 때문에 바로 0을 반환합니다.

#9
그리고 0이 아닌 값 중에서 음수의 개수만 세어줍니다. (isOdd++)
배열 안의 값을 전부 곱했을 때 음수의 개수가 홀수이면 값은 음수이고, 짝수면 양수값이 나오기 때문입니다.

#13, 14
for문이 종료되면 isOdd에 총 음수의 개수가 있습니다.

이를 2로 나눈 나머지 값을 통해서 홀수면 output에 -1을 짝수면 1을 저장하고 리턴합니다.