코딩테스트연습/프로그래머스

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

:)jun 2021. 11. 29. 20:46

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

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

// 테스트코드

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class Quiz1_ponketmonTest {

    Quiz1_ponketmon q;

    @BeforeEach
    void setUp() {
        q = new Quiz1_ponketmon();
    }

    @Test
    void test1(){
        assertEquals(2,q.solution(new int[]{3,1,2,3}));
    }

    @Test
    void test2(){
        assertEquals(3,q.solution(new int[]{3,3,3,2,2,4}));
    }

    @Test
    void test3(){
        assertEquals(2,q.solution(new int[]{3,3,3,2,2,2}));
    }
}

// 프로덕션코드

import java.util.Arrays;

public class Quiz1_ponketmon {
    public int solution(int[] nums) {

        int possibleMaxNumber = nums.length/2;

        return checkMaxNumber(possibleMaxNumber, nums);
    }

    int checkMaxNumber(int possibleMaxNumber, int[] nums){

        Arrays.sort(nums);
        int lastNumber = nums[0];
        int maxNumber = 1;

        for(int i=1; i<nums.length; i++){
            if(possibleMaxNumber == maxNumber){
                return possibleMaxNumber;
            }

            if(nums[i] != lastNumber){
                lastNumber = nums[i];
                maxNumber++;
            }
            else{
                continue;
            }
        }
        return maxNumber;
    }
}

// 성공! lastNumber -> lastNumberChecked로 바꾸는 게 이해가 더 쉽겠다.

import java.util.Arrays;

public class Quiz1_ponketmon {
    public int solution(int[] nums) {

        int possibleMaxNumber = nums.length/2;

        return checkMaxNumber(possibleMaxNumber, nums);
    }

    int checkMaxNumber(int possibleMaxNumber, int[] nums){

        Arrays.sort(nums);
        int lastNumberChecked = nums[0];
        int maxNumber = 1;

        for(int i=1; i<nums.length; i++){
            if(possibleMaxNumber == maxNumber){
                return possibleMaxNumber;
            }

            if(nums[i] != lastNumberChecked){
                lastNumberChecked = nums[i];
                maxNumber++;
            }
            else{
                continue;
            }
        }
        return maxNumber;
    }
}

// 성공! 아.. for문 스트림이라는걸 이용할 수 있다는데... 저번에 iterator랑 같이 정리해서 JAVA폴더에 올리겠다.