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

최댓값과 최솟값

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

이 문제에 대해서는 링크를 남긴다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나쁘지 않게 문제를 풀었다고 생각했는데

눈에 띄는 남의 풀이가 있었다.

처음으로 남의 코드에 좋아요 눌렀다.

라니 센세, 당신은 어떤 분일까요...?

 

'압살'.

프로그래머스에서 문제 풀면서 남의 코드 전부 보고 있는데 '압살'이라는 단어는 처음 보는 것 같았다.

그래서 돌려 봤다.

내가 처음 작성한 코드가 아래.

import java.util.*;

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ",-1);
        int[] numbers = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
        int min = Arrays.stream(numbers).min().orElse(Integer.MIN_VALUE);
        int max = Arrays.stream(numbers).max().orElse(Integer.MAX_VALUE);
        return min + " " + max;
    }
}

 

다시 돌리기 귀찮아서 안 하는데 속도가 12~14초 정도 나왔던 거 같다.

 

라니 센세 코드는 1초대였나? 하여튼 나랑 거의 10배 차이 났음.

 

그래서 나는 내가 stream을 3번이나 써서 그럴까 싶어

import java.util.*;

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ",-1);
        // int[] numbers = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
        int[] numbers = new int[arr.length];
        int i=0;
        for(String e : arr) {
            numbers[i] = Integer.parseInt(e);
            i++;
        }
        int min = Arrays.stream(numbers).min().orElse(Integer.MIN_VALUE);
        int max = Arrays.stream(numbers).max().orElse(Integer.MAX_VALUE);
        return min + " " + max;
    }
}

 

이렇게 코드를 고쳐 봄.

내가 처음 제출한 코드랑 속도 차이 거의 없음.

Why???

 

GPT도 이에 대해 제대로 된 설명을 못 함.

GPT가 나와 라니 센세보다 더 좋은 코드라며 준 거 돌려 봄.

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ",-1);
        int[] numbers = new int[arr.length];
        for(int i = 0; i < arr.length; i++) {
            numbers[i] = Integer.parseInt(arr[i]);
        }
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        for (int number : numbers) {
            if (number < min) {
                min = number;
            }
            if (number > max) {
                max = number;
            }
        }
        return min + " " + max;
    }
}

 

기존 내 코드랑 속도 차이 거의 없음...

어떻게 이럴 수가 있는지???

 

getAsInt() 썼다고 속도가 막 빨라질 수 있나??

그리고 for문 돌렸는데 왜 스트림이랑 속도가 거의 같지??

 

아~ 모르겠다!!!

뭔가 생각하고 알아봐도 잘 모르겠는 문제를 맞닥뜨려서 원래 이 문제 포스팅 안 하려다가 했다.

 

내가 처음 푼 Lv. 2 문제!

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

문자 개수 세기  (0) 2024.04.24
정수 제곱근 판별  (0) 2024.04.24
조건에 맞게 수열 변환하기 2  (0) 2024.04.22
커피 심부름  (0) 2024.04.22
리스트 자르기  (0) 2024.04.22