코딩테스트 - 프로그래머스/Lv. 0

[59] JAVA 짝수 홀수 개수

유혁스쿨 2023. 11. 21. 16:26
728x90
반응형

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항
  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

 

입출력 예

 

num_list result
[1, 2, 3, 4, 5] [2, 3]
[1, 3, 5, 7] [0, 4]

 

입출력 예 #1

  • [1, 2, 3, 4, 5]에는 짝수가 2, 4로 두 개, 홀수가 1, 3, 5로 세 개 있습니다.

입출력 예 #2

  • [1, 3, 5, 7]에는 짝수가 없고 홀수가 네 개 있습니다.

[나의 풀이]

import java.util.stream.IntStream;

class Solution {
	public int[] solution(int[] num_list) {
    	int count = (int)IntStream.of(num_list).filter(el->el%2 == 0).count();
    	return new int[] {count, num_list.length-count};
    }
}

 

[다른 풀이]

class Solution {
	public int[] solution(int[] num_list) {
    	int[] answer = new int[2];
        for(int i = 0; i < num_list.length; i++)
        	answer[num_list[i]%2]++;
        return answer;
    }
}

answer의 길이를 2로 지정한다.

num_list의 길이만큼 반복하여 answer의 0 혹은 1 인덱스값을 증가시킨다.

0번째 인덱스에는 짝수를, 1번째 인덱스에는 홀수를 넣는다

정말 기발하구만...

 

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

class Solution {
	public int[] solution(int[] num_list) {
    	return Arrays.stream(num_list).boxed()
        .collect(Collectors.partitioningBy(number->number%2==1 , Collectors.counting()))
        .values().stream()
        .toArray()
    }
}

Collectors의 partitioningBy(조건, 수집할 값) 를 활용할 수도 있다.

partitioningBy()는 지정한 조건에 일치하는 그룹과 일치하지 않는 그룹 두가지로 분할한다.

지정한 조건의 boolean타입을 key로, 수집할 값을 value로 Map형태로 반환한다.

[true/false, counting]의 형태로 값을 지니고 있게 된다.

그중 values()를 활용하여 counting된 값만 가져와 배열로 변환하여 반환한 풀이법이다.

728x90
반응형