기록을 합시다.
[프로그래머스] 폰켓몬(python/java) 본문
문제 요약
- 폰켓몬은 제시된 폰켓몬 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;
}
}
}
'공부 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 완주하지 못 한 선수 (0) | 2023.06.11 |
---|---|
[프로그래머스] 최소 직사각형(python/java) (0) | 2023.06.11 |
[프로그래머스] k번째 수(python/java) (0) | 2023.06.05 |
[프로그래머스] 같은 숫자는 싫어(python/java) (0) | 2023.06.05 |
[프로그래머스] Jaden Case (0) | 2023.04.07 |
Comments