알고리즘/JAVA

[JAVA] 숫자 배열 중 과반수 찾기

야아옹 2020. 10. 20. 17:14

문제 : 숫자 배열중 중복된 숫자를 찾고 과반수를 넘겼을 시 반환 아닐 시 -1 을 반환 하는 메소드 만들기

        과반수 = 배열 길이 n 의 나누기 2

 

Ex) 3, 5, 3, 3, 3, 4, 3, 1 

     * 과반수 8 / 2 = 4

     * 반환값 = 3

    1, 5, 3, 6, 3, 4, 3, 1 

    * 과반수 8 / 2 = 4

     * 반환값 = -1


풀이 : C# 으로 했던것들 java 로 변환!!!!

package com.company;

import java.io.Console;
import java.lang.reflect.Array;
import java.util.Arrays;

public class MajorityNumberFind {

    static int[] arr1 = { 3, 5, 3, 3, 3, 4, 3, 1 };
    static int[] arr2 = { 1, 5, 3, 6, 3, 4, 3, 1 };


    public static void main(String[] args)
    {
       System.out.println("첫번째 배열 1, 5, 3, 3, 3, 4, 3, 1 중 과반수 = " + Solution(arr1));
       System.out.println("두번째 배열 1, 5, 3, 6, 3, 4, 3, 1 중 과반수 = " + Solution(arr2));
    }

    static int Solution(int[] nums)
    {
        int result = 0;
        int majorityNum = (nums.length) / 2;

        var _array = Arrays.stream(nums).distinct().toArray();
        int count = 0;

        for (int item: _array)
        {
            // Stream 연습용
            int count2 = (int)(Arrays.stream(nums).filter(x -> x == item).count());
            
            for (int i =0; i < nums.length; i++)
            {
                if (item == nums[i])
                {
                    count++;
                    continue;
                }
            }
            if (count2 > majorityNum)
            {
                result = item;
                break;
            }
            else
            {
                return -1;
            }
        }
        return result;
    }


}