02-07 13:11
Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
관리 메뉴

기록을 합시다.

[프로그래머스] 폰켓몬(python/java) 본문

공부/알고리즘

[프로그래머스] 폰켓몬(python/java)

울집고양이세마리 2023. 6. 5. 14:40

문제 요약

  • 폰켓몬은 제시된 폰켓몬 n개 중에서 2/n마리 가질 수 있다.
  • 2/n 마리 중에는 중복은 있을 수 없다.
  • 중복을 제외하면 최대 몇 마리까지 가질 수 있는지가 정답이다.

파이썬으로 제출한 정답

def solution(nums):
    types = len(set(nums))
    n = len(nums)

    if n//2 > types:
        return types

    if n//2 <= types: 
        return n//2

해설

이건 정말 단순하게 풀 수 있는 문제였다.
일단은 nums가 폰켓몬들이 담긴 리스트였고, 그 리스트에서 우선 중복 제거를 하기 위해 set을 이용하였다.
set을 이용하였지만, 계산에서는 딱히 set 내용물이 필요 없기 때문에 len으로 단순히 크기만 구해주었다.

types = len(set(nums))

후에는 원본 리스트의 크기값도 구해준다.

n = len(nums)

마지막으로는 중복 제거된 types와 원본 리스트 크기 값의 n//2값과 비교해준다.
특히 n//2 가 types보다 크다면, 그냥 types를 리턴해주며, 만약 n//2가 types보다 작거다 같다면 n//2를 리턴해준다.
types는 이미 중복이 다 제거 된 리스트라, n//2 보다 작으면, 어차피 그 만큼밖에 선택 못 해준다.
또한 같은 맥락으로 n//2보다 크거나 같으면 n//2을 리턴해줘야 한다.

    if n//2 > types:
        return types

    if n//2 <= types: 
        return n//2

그리고 이 코드를 한 번 java로 작성해보았다. 그리고 로직은 같아서 설명은 생략하겠다.

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        HashSet<Integer> set = new HashSet<Integer>();
        for(int num:nums){
            set.add(num);
        }

        int setSize = set.size();
        int numsSize = nums.length;

        if((numsSize/2) <= setSize){
            return numsSize/2;
        }else{
            return setSize;
        }

    }
}
Comments