티스토리 뷰

Algorithm

[Java/Programmers] Lv.1 폰켓몬

Jingni 징니 2021. 4. 7. 16:34

 

[Java/Programmers]

Lv.1 폰켓몬

 

 

⬇︎ ⬇︎ ⬇︎ 문 제 링 크 ⬇︎ ⬇︎ ⬇︎

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

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

 


 

입/출력

 

(입력)

N마리의 폰켓몬의 종류 번호가 들어있는 배열 nums (1 ~ 10,000 사이, 항상 짝수)

(출력)

N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법 (종류 번호 1 ~ 200,000 이하의 자연수)

 

해결 과정

이 문제를 읽었을 때 제일 먼저 떠올랐던 것은 바로 중복 제거다.

폰켓몬 종류 숫자가 들어있는 nums 배열에서 중복을 제거한 다음 개수를 계산하면 쉽게 문제를 풀 수 있을 거라고 생각했다.

for문을 돌려 nums의 값들 중 중복되지 않는 값들만 arrayList에 넣었고,

마지막에 arraylist.size와 nums.length/2의 값을 비교해 더 작은 값을 반환했다. 

 

풀이
    public static int solution(int[] nums) {
        int answer = 0;
        
        // nums 에서 중복되지 않는 값만을 arrayList에 넣는다.
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(!arrayList.contains(nums[i])) {
                arrayList.add(nums[i]);
                // 결과적으로 answer와 arrayList.size()의 값은 동일
                answer++;
            }
        }

        // N/2 (종류의 최댓값) 과 중복 제거된 arraylist의 길이를 비교해 더 작은 것을 return한다.
        int max_answer = nums.length / 2;
        if(max_answer < answer) {
            return max_answer;
        } else {
            return answer;
        }
    }

 

후기

문제가 길어서 이해하는데 시간이 소요됐지만 이해하고 나니 생각보다 빨리 해결방법을 찾을 수 있었다.

처음에는 이렇게 풀어도 되려나..? 라는 생각으로 코드를 작성했는데 한번에 정답이 나와서 약간 허탈하기도 했다.

너무 어렵게 생각하기 보다는 먼저 생각나는 해결방법을 시도해보고 안되면 다른방법을 시도하는 것도 괜찮은 것 같다.

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday
공지사항
최근에 올라온 글