[코딩테스트] 폰켓몬, Set | 프로그래머스

Bluewave·2024년 5월 16일

코테공부_java

목록 보기
27/99
post-thumbnail

문제

✏️ 문제 바로가기

문제레벨정답률
폰켓몬Lv.165%

My Code

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int result = 0;
        Set<Integer> set = new HashSet<>();
        
        for(int i : nums){
            set.add(i);
        }
        
        if(set.size()<=nums.length/2){
            return set.size();
        } else{
            return nums.length/2;
        }
    }
}

우선 Set의 특징인 중복 불가능을 활용해서 중복을 제거한 서로 다른 수들만 저장을 하였다.
그리고 서로 다른 수의 개수가 nums.length/2보다 작거나 같으면 set.size()를 리턴, 즉 서로 다른 숫자 개수를 리턴하였다.
그게 아니라면 nums.length/2, 즉 전체 배열의 절반의 개수를 리턴하였다.

최적화 코드

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        Set<Integer> set = new HashSet<>();
        
        for (int num : nums) {
            set.add(num);
        }
        
        int uniqueCount = set.size();
        int halfLength = nums.length / 2;
        
        return Math.min(uniqueCount, halfLength);
    }
}

내가 만든 코드와 큰 로직은 변하지 않았고, 사소한 부분들을 간결하게 만들었다.
if-else문을 Math.min() 메서드를 사용해서 간단하게 해결한 코드이다.


Set 정리

Set은 Java의 컬렉션 프레임워크 인터페이스 중 하나이다.
중복을 허용하지 않고, 순서가 없는 것이 특징!

☘️ 주요 메서드

  • add(E element) : 지정된 요소 추가 / 이미 있는 값이면 추가되지 않음
  • remove(Object object) : 지정된 요소 제거
  • contains(Object object) : 지정된 요소가 있는지 여부 판단
  • size() : 요소 개수 반환
  • isEmpty() : 비어 있는지 여부 확인
  • clear() : 모든 요소 제거
  • iterator() : 요소들을 반복하는 데 사용되는 Iterator 반환
  • addAll(Coolection<?extends E>c) : 지정된 콜렉션의 모든 요소를 Set에 추가

☘️ 주요 구현 클래스

  • HashSet : 해시 테이블 기반
  • TreeSet : 이진 검색 트리 기반
  • LinkedHashSet : 해시 테이블 + 연결 리스트 / 삽입 순서 유지

** 생성 : Set<String> set = new HashSet<>();

profile
Developer's Logbook

0개의 댓글