알고리즘 문제 풀기
[프로그래머스 1845] 폰켓몬 (java)
Solu-
2021. 4. 22. 15:42
나의 코드
import java.util.ArrayList;
class Solution {
public int solution(int[] nums) {
int answer = nums.length / 2;
ArrayList<Integer> li = new ArrayList<>();
for (int i : nums) {
if (li.isEmpty()) {
li.add(i);
}
else {
if (li.indexOf(i) == -1) {
li.add(i);
}
}
if (li.size() == answer) {
return answer;
}
}
return li.size();
}
}
결국 중복을 제거하고, 가장 많은 종류를 고를 수 있는 게 무엇인가 알아내는 것이다.
최대 N / 2 까지 고를 수 있는데, 그 내에서 가장 많은 종류를 선택할 수 있는 방안을 찾는다.
이 코드는 ArrayList<Integer>
를 이용해서 중복 값을 제외한 리스트를 만들었다. 이 리스트의 길이 (=중복하지 않은 원소 갯수)가 답이 되는데, 이 때 최대값은 N / 2 이기 때문에 N/2에 N / 2에 도달할 경우 int[] nums
탐색을 종료한다.
모범 답안
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
HashSet<Integer> hs = new HashSet<>();
for(int i =0; i<nums.length;i++) {
hs.add(nums[i]);
}
if(hs.size()>nums.length/2)
return nums.length/2;
return hs.size();
}
}
중복되지 않는 원소를 넣기 위해 HashSet
을 사용했다. HashSet은 중복 요소를 자동으로 제거해주기 때문에, 중복 체크를 할 필요 없이 코드가 훨씬 간편하게 마무리가 된다.
문제에 따라 적절한 자료 형태를 사용할 수 있도록 자료형에 대한 공부가 필요하겠다.