본문 바로가기
프로그래머스 (Java)

프로그래머스 1. 폰켓몬(자바)

by Y25N 2023. 10. 27.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

1. 홍 박사는 N마리의 폰켓몬 중 N/2 마리를 가져가도 좋다고 함

2. 폰켓몬은 종류에 따라 고유 번호가 있어 같은 종류의 폰켓몬은 같은 번호를 가짐

3. 최대한 다양한 종류의 폰켓몬을 포함해 N/2마리 선택

4. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어짐

5. 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아 폰켓몬 종류 번호의 개수를 return

 

풀이

1. HashSet 사용

*HashSet?

- set: 객체를 중복해 저장할 수 없음. 중복을 자동으로 제거해줌

- 비선형 구조이기 때문에 순서, 인덱스가 존재하지 않음

- List에 비해 처리 속도 느림

 

- HashSet: set 인터페이스에서 지원하는 구현 클래스

- 중복된 값 허용 x

- 저장한 순서가 보장되지 않음 (저장 순서를 유지해야 한다면 JDK 1.4 부터 지원되는 LinkedHashSet 이용)

- null 값 허용

- 아래와 같이 선언

HashSet<String> str = new HashSet<>();

2. set을 이용해 중복 제거

3. nums.length/n < set -> return set

4. nums.length/n > set -> return nums.length/n

 

import java.util.HashSet;
class Solution {
    public int solution(int[] nums) {
        int pick = nums.length/2;
        int answer = 0;
        HashSet <Integer> set = new HashSet<>();

       for (int i: nums) {
            set.add(i);
        }
        if (pick >= set.size()) {
            answer = set.size();
        }
        else {
            answer = pick;
        }
        return answer;
    }
}

*Range-based for loop

//for (로컬변수:콜렉션시작주소)
//무조건 범위 전체를 탐색