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