2021년 7월 22일 목요일

[ Algorithm ] 폰켓몬 - Array to Set


[ 문제 ] 

https://programmers.co.kr/learn/courses/30/lessons/1845


* 제한사항

nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.

nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.

폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.

가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.


*입출력 예

nums result

[3,1,2,3] 2

[3,3,3,2,2,4] 3

[3,3,3,2,2,2] 2



[ 제출 ]

import java.util.*;

class Solution {
    public int solution(int[] nums) {

        int answer = 0;
        Set<Integer> p = new HashSet<Integer>();

        for(int e : nums)  p.add(e);
        if(p.size() > nums.length/2)
            answer = nums.length/2;
        else
            answer = p.size();

        return answer;
    }
}


[ 풀이 ]

nums의 int형 배열을 set으로 자료형변환을 통해 중복을 제거한다.

최대값은 N/2이므로 set에 담긴 요소의 갯수가 더 크다면 N/2를 반환한다.



[ 다른사람풀이 ]

import java.util.Arrays;

import java.util.stream.Collectors;


class Solution {
    public int solution(int[] nums) {

        return Arrays.stream(nums)
            .boxed()
          .collect(Collectors.collectingAndThen(Collectors.toSet(),phonekemons 
                -> Integer.min(phonekemons.size(), nums.length / 2)));
    }
}


첫번째 풀이의 기능을 자바 스트림을 이용하여 실행

코드가 좀더 간결해지고 내부반복자를 사용하기에 병렬처리가 용이하다.



댓글 없음:

댓글 쓰기