본문 바로가기
코딩테스트 연습

배열 만들기 5

by 신재은👩🏼‍💻 2024. 4. 19.

문제 설명
문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.

배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.

제한사항
0 ≤ s < 100
1 ≤ l ≤ 8
10l - 1 ≤ k < 10l
1 ≤ intStrs의 길이 ≤ 10,000
s + l ≤ intStrs의 원소의 길이 ≤ 120


입출력 예
intStrs k s l result
["0123456789","9876543210","9999999999999"] 50000 5 5 [56789, 99999]


import java.util.ArrayList;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        ArrayList<Integer> arr = new ArrayList<Integer>();
        
        for(int i=0; i<intStrs.length; i++) {
            int temp = 0;
            temp = Integer.parseInt(intStrs[i].substring(s, s+l));
            if(temp > k) {
                arr.add(temp);
            }
        }
        
        int[] answer = arr.stream().mapToInt(i -> i).toArray();
        
        return answer;
    }
}


근데 내가 다른 사람들의 답을 보면서 궁금했던 게

'스트림을 배배꼬아 쓰면 성능이 너무 안 좋아서 현업에서 쓸 수 없다'는 말이 진짜인가였다.

 

import java.util.*;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        return Arrays.stream(intStrs).mapToInt(value -> Integer.parseInt(value.substring(s, s + l))).filter(value -> value > k).toArray();
    }
}

 

이거랑 내 코드랑 로직 차이 없는 거 같은데 성능 차이가 있을까?

gpt한테 물어 봤다.

 

벤치마크 테스트 코드는 주는데 자기가 뭐라고 직접적으로 답하진 않는다.

'상황에 따라 다르다'고만 답한다.

 

스트림이 쓰는 형태에 따라 느리게 동작할 수 있다는 건 충분히 이해가 간다.

답안 제출 시 실제 걸리는 시간에 그게 보이니까.

다만 내가 궁금했던 건 같은 로직을 구현하는 코드인데

하나는 나 같은 코드,

하나는 스트림으로 구현한... 까지 글을 쓸 무렵 떠올랐다.

'내가 직접 프로그래머스에서 테스트 해 보면 되잖아.'

 

결론: 스트림 쓸 때 2~3배 느리다.

'코딩테스트 연습' 카테고리의 다른 글

모스부호 (1)  (0) 2024.04.20
진료순서 정하기  (0) 2024.04.20
문자열 뒤집기  (0) 2024.04.19
글자 지우기  (0) 2024.04.19
수열과 구간 쿼리 1  (0) 2024.04.19