코딩테스트/프로그래머스
[코딩테스트] Java 폰켓몬
[dev] hiro
2024. 11. 8. 15:57
제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers 알고리즘 고득점 Kit입니다.
포인트
Map을 사용하여 푸는 문제였습니다. 폰켓몬의 종류와 폰켓몬의 갯수를 확인하는 것이 포인트였다고 생각합니다.
N/2 마리를 선택할 때 폰켓몬의 종류보다 N/2가 더 크면 폰켓몬의 종류를 리턴하고 반대면 N/2를 리턴하면 됩니다.
폰켓몬 소스코드
import java.util.*;
class Solution {
public int solution(int[] nums) {
Map<Integer, Integer> ponkets = new HashMap<>();
for (int num: nums) {
ponkets.put(num, ponkets.getOrDefault(num, 0) + 1);
}
int halfN = nums.length / 2;
if (halfN <= ponkets.size()) {
return halfN;
} else {
return ponkets.size();
}
}
}
코드 설명
- Map<Integer, Integer> ponkets = new HashMap<>();
정수형 num을 키로 하고, 각 숫자가 몇 번 등장하는지를 값으로 하는 해시맵 ponkets를 생성합니다. - for (int num: nums) { ponkets.put(num, ponkets.getOrDefault(num, 0) + 1); }
nums 배열을 순회하면서 각 숫자가 ponkets 맵에 이미 존재하는지 확인합니다.- 존재하면 해당 숫자의 값에 +1을 합니다.
- 존재하지 않으면 기본값 0에서 +1을 하여 새로운 키-값 쌍으로 추가합니다.
- int halfN = nums.length / 2;
nums 배열의 길이를 반으로 나눈 halfN을 계산하여 가질 수 있는 폰켓몬 수의 최대치를 나타냅니다. - if (halfN <= ponkets.size()) { return halfN; } else { return ponkets.size(); }
고유한 폰켓몬의 종류 수(ponkets.size())와 halfN을 비교합니다.- halfN이 고유한 폰켓몬의 종류 수보다 작거나 같으면 halfN을 반환합니다 (최대 가질 수 있는 폰켓몬 수).
- 그렇지 않으면 고유한 폰켓몬의 종류 수를 반환합니다.