본문 바로가기
알고리즘

[프로그래머스/JAVA] 폰켓몬

by 상후 2021. 7. 27.
728x90
반응형

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

문제 설명

출처 : 프로그래머스

N마리의 폰켓몬 중 N/2마리를 가져갈 수 있다.
각 배열의 값은 폰켓몬의 종류를 의미하는데, 가져갈 수 있는 폰켓몬의 종류 수의 최댓값을 구하세요.
풀이 방법
1. 최대 가져갈 수 있는 폰켓몬은 N/2
2. 연구실에 존재하는 폰켓몬의 종류의 수 구하기

고려해야 할 케이스
- 종류가 많아도 다 못 데려가는 케이스
- 많이 데려갈 수 있어도 종류가 다양하지 않는 케이스
내 코드(JAVA)

 

public int solution(int[] nums) {
    HashSet<Integer> set = new HashSet<>();		// set.size() : 폰켓몬 종류의 수
    int maxCount = nums.length/2;

    for(int num : nums) {
        set.add(num);
    }
	
    // set.size()가 maxCount 보다 크거나 같다면 maxCount -> 종류가 많아도 다 못데려감
    // set.size()가 maxCount 보다 작다면 set.size() -> 많이 데려갈 수 있어도 종류가 없음
    return maxCount <= set.size() ? maxCount : set.size();
}
스터디 공유 내용

폰켓몬의 종류의 수(Set의 길이)와 데려갈 수 있는 수(maxCount) 중 최소값이 구하려는 값임을 확인하였습니다.

 

예를 들어 5마리를 데려갈 수 있어도 종류가 1가지라면 > 1

2마리를 데려갈 수 있어도 종류가 4가지라면 > 2

 

return Math.min(maxCount, set.size());

 

위 코드처럼 사용이 가능하다.

좋은 발상인 것 같다~!

728x90
반응형

댓글