폰켓몬

이소정·2021년 7월 14일
0

알고리즘

목록 보기
2/3
post-thumbnail

프로그래머스 레벨1 폰켓몬을 풀어보았다.

1. 문제

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다.
N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

종류를 조합한 수가 아닌 조합할 수 있는 최대종류가 몇 개인지를 묻는질문이다!
문제를 보면서 이해했지만 푸는중간중간 잊어버렸던것 같다.
(문제를 꼼꼼히 읽고 기억해야한다!)

2. 설계

문제를 보면, 총 N마리의 폰켓몬 중에서 N/2마리를 가져와도 된다고 했다.
이 말은, 결과값이 최대 N/2가 된다는 뜻이다.

다시말해, 아래 두가지 방법으로 결과값이 결정된다는 말이다.
1) 조합할 수 있는 최대 종류의 수 >= N/2
종류의수가 N/2보다 크거나 같으면 결과값은 N/2가 된다.

2) 조합할 수 있는 최대 종류의 수 < N/2
종류의 수가 N/2보다 작으면 결과값은 종류의 수가 된다.

필자는 아래와 같은 순서로 구현하고자 했다.
① 최대 갯수(N/2)를 구한다.
② 종류를 담을 배열(comp)을 생성한다.(중복된 종류를 제외하고 종류별로 1개씩만을 가진다.)
③ 위 ②에서 생성한 배열에 동일한 종류가 있는지 확인하기 위한 변수를 생성한다.
④ 주어진 배열에서 하나씩 꺼내어 위 ②에서 생성한 배열에 있는지 확인한다.
⑤ 생성한 배열에 종류가 있다면 ③의 변수를 true로 바꾼다.
⑥ 생성한 배열에 종류가 없다면 배열에 종류를 추가한다.
⑦ 생성한 배열의 길이를 구한다.
⑧ 결과값 결정을 위해 위에서 말한 두가지방법을 이용하여 배열의 길이(종류의수)와 최대 갯수(N/2)를 비교한다.

이를 코드로 표현하면 아래와 같다.

3. 풀이

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        // 동일한 종류가 있는지 확인하기위한 check
        boolean check = false;
        
        // 최대 선택 갯수
        int max = nums.length/2;
        // 종류를 담을 ArrayList
        ArrayList<Integer> comp = new ArrayList<Integer>();
        
        
        // 주어진 배열값 하나씩 확인
        for(int i = 0; i < nums.length; i++){
            // comp 배열과 비교
            for(int j = 0; j < comp.size(); j++){
                if(comp.get(j) == nums[i]){
                 check = true;
                 }
            }
            
            //comp배열에 없으면 comp배열에 하나씩 추가
            if(check == false){
               comp.add(nums[i]);
            }
            
            check = false;
        }
        
        if(comp.size() >= max){
           for(int c = 0; c < comp.size(); c++){
            }
            answer = max;
        }else{
            answer = comp.size();
        }

        return answer;
    }
}

4.마치며...

당연한 말이지만 문제이해가 정말 중요하다.
그 다음 어떤 방식으로 풀지 생각하고,
구현할때는 import java.util.*;를 일단 적고 시작하는 습관을 들이자!

profile
소소하게 하나 두울

0개의 댓글