[프로그래머스 고득점 Kit] 폰켓몬

김가희·2023년 3월 2일
0

PS

목록 보기
1/4

[Hash 1일차] 폰켓몬

⬇️ 나의 코드 ⬇️(JAVA)

import java.util.HashMap;

class Solution {
    public int solution(int[] nums) {
        
        HashMap<Integer, Integer> poketmon = new HashMap<>();
        int i = 0;
        int len = nums.length;
        
        //각 포켓몬의 개수를 구한다.
        for(i = 0; i < len; i++) {
            poketmon.put(nums[i], poketmon.containsKey(nums[i]) ? (poketmon.get(nums[i]) + 1) : 1);
        }
        
        //만약 포켓몬 종류 >= N/2 이면 정답은 N/2 
        //그렇지 않으면 포켓몬 종류이다.
        if(poketmon.size() >= len / 2) return len / 2;
        else return poketmon.size();
    }
}

📚 풀면서 알게된 것

length는 배열의 길이, length()는 문자열의 길이, size()는 컬렉션 프레임 워크 타입을 의미한다.

이제는 좀 적응 될 만한데 아직도 이걸 헷갈려 하는게 사람인지 짐승인지 모르겠지만 좀 외워라고 적어둔다 아이고야

조건 연산자는 조건식 ? 식1(true일 때) : 식2(false일 때)

Kotlin 에서는 ?:(엘비스 연산자)를 사용해서 Null 을 처리했었는데 Java의 경우 그게 없는것... 같더라고..? 그래서 조건 연산자를 쓰면 편하지 않을까 해서 사용해봤다.

JAVA Map 같은 경우는 따로 포스트를 파서 작성한다.
⬇️ 링크 ⬇️
https://velog.io/@kimgaheeme/JAVA-Map

👀 다른 사람의 코드를 보고 알게된 것

사실 이 문제는 굳이 HashMap 으로 풀 필요는 없다. 그냥 Set을 이용해도 되었고, 각 포켓몬의 개수를 체크할 필요도 없었기 때문이다.
하지만 그 외에도 엄청난 코드를 하나 볼 수 있었다.

코드
import java.util.Arrays;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] nums) {
        return Arrays.stream(nums)
                .boxed()
                .collect(Collectors.collectingAndThen(Collectors.toSet(),
                        phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
    }
}

이게 뭘까.. 함수형 프로그래밍의 정석.. 이라고는 하는데..(함수형 프로그래밍에 대해서 -> https://mangkyu.tistory.com/111 다른사람 블로그임) 그래서 한 줄 한 줄 뜯어봤다.

stream 의 경우 JAVA8 부터 지원되는 기능이라고 한다. 이에 대해서도 역시 따로 포스트를 작성하였다.
⬇️ 링크 ⬇️
https://velog.io/@kimgaheeme/JAVA-Stream

profile
안드로이드 개발자

0개의 댓글