Algorithm/Programmers

[Programmers] 프로그래머스 1845 폰켓몬 - java

담크 2021. 7. 1. 23:01

이번 문제는 제목이 귀여워서 풀어보려고 했는데 처음에는 문제가 뭔 말인지... 싶었습니다 ㅎㅎ

점점 한글 읽기 능력이 떨어지고있나봐요.....

폰켓몬 문제를 보면

잘 안보이시다면

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

 

여기를 참고해주세요~

 

 


문제풀이

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int pickNums = nums.length / 2;		//선택할 횟수
		
        //중복 제거
        Set<Integer> set = new HashSet<Integer>();

        for(int num : nums) {
            set.add(num);
        }
		
        //set의 크기가 pickNums보다 크면 pickNums리턴 작으면 set의 size를 리턴
        if(pickNums < set.size()) {
            answer = pickNums;
        }else {
            answer = set.size();
        }

        return answer;
    }
}

 

 

이번 문제는 그래도 비교적 쉽게 풀었던 거 같아요 뭔가 코딩하는 것이 아닌 수학 문제를 푸는 느낌이었습니다.

아마 예시를 보고 풀어보면 이해하기 쉬울 것 같습니다.

예 1) [3, 1, 2, 3] 에서 숫자의 개수는 1, 2, 3이지만 선택할 폰켓몬의 갯수는 4 / 2 이므로 2개를 선택해야 합니다.

따라서 가장 많은 종류의 폰켓몬을 선택하는 result값은 2입니다.

 

예 3) [3, 3, 3, 2, 2, 2] 에서 숫자의 개수는 2, 3이지만 선택할 폰켓몬의 갯수는 6 / 2 이므로 3개를 선택해야 합니다.

따라서 가장 많은 종류의 폰켓몬을 선택하는 result값은 2입니다.

 

이제 뭔가 좀 감이 오시나요?

이처럼 어떤 문제인지 먼저 풀어보시면 코딩의 방향을 잡을 수 있는 문제들도 있습니다.

문제를 보고 바로 코딩하려는 생각보다 가끔은 이렇게 예제를 보고 문제를 먼저 풀어보면 보다 더 쉽게 코딩할 수 있습니다.