코딩테스트 스터디

코딩테스트 연습 - 중복된 숫자 개수 (JAVA)

개발짱 지망생 2023. 2. 3. 07:00

프로그래머스 코딩테스트 입문 0단계 문제입니다

https://school.programmers.co.kr/learn/courses/30/lessons/120583

 

📢 문제 설명

정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요.

 

⭕ 정답 코드

1. for문

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        
        //1. for문 기반
        for(int item : array)
            if(item==n) answer++;
        
        return answer;
    }
}

 

2. stream과 filter

import java.util.*;
class Solution {
    public int solution(int[] array, int n) {
    	return (int)Arrays.stream(array).filter(a -> a == n).count();
    }
}

 

⚠️ 직접 풀어본 처음 풀이

🔗 코드

1. for문

public class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;

        //1. for문 기반
         for(int i = 0; i<array.length; i++)
             if(array[i]==n) answer++;

        return answer;
    }
}

🔍 해설

1. 배열 요소만큼 반복을 시키고

2. 요소에 n과 같은 값이 있으면 1씩 증가시킨다

 

 

2. stream과 filter

import java.util.*;
public class Solution1 {
    public int solution(int[] array, int n) {
        int answer = 0;
        
        //2. 필터 사용하기
        answer = (int)Arrays.stream(array)
                .filter(a -> a == n)
                .count();

        return answer;
    }
}

🔍 해설

1. array 배열의 값으로 stream을 만들고

2. filter()로 n과 같은 값을 필터링 해준다

3. count() 메서드로 필터링된 값의 개수를 세어서 answer에 넣어준다

4. count() 메서드의 반환형이 long이므로 (int) 형변환이 필요하다

 

✅ 개선할 점 

1. for each문의 형식

for(int item : array)
    if(item == n) answer++;

 

2. answer 변수를 없애고 바로 return해주면 더 간단해진다

return (int)Arrays.stream(array).filter(a -> a == n).count();

 

📒 기억하고 갈 문법

Arrays 클래스의 stream