JAVA/코딩테스트 문제풀이

[프로그래머스 - JAVA] Lv.0 중복된 숫자 개수

kKkKkKWJ 2025. 3. 12. 20:22

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

답안1 - for문 사용

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        
        for(int i:array){
            if(i==n) answer++; 
        }
        
        return answer;
    }
}

 

문제는 정말 간단해서 for문으로 코딩 1일차 어린이도 쉽게 풀 수 있는 문제이다.

하지만 이 문제를 stream으로도 풀 수 있고, 익숙하지 않았기 때문에 stream API를 사용하여 풀어보았다.

 

답안2 - stream API 사용

import java.util.Arrays;

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

 

메모

사실상, for문과 stream API의 성능을 비교하면 아주 미세한 차이지만 for문이 더 좋다고 한다.이는 stream이 더 늦게 나와 컴파일러가 최적화를 제대로 수행하지 않아서 이다.

 

그럼에도 불구하고 stream을 사용하는 이유는 (1)가독성(2)stream에서 제공하는 함수로 간단하게 문제를 해결할 수 있기 때문이다.

 

for문과 stream API의 장단점을 따져보고,

상황에 맞는 문법을 사용해보자.