반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

** Javascript

 

 

 

1) 내 첫식은 이랬다

 

 

function solution(arr) {
    var answer = [ ...arr ];
    answer.sort((a, b) => b - a).pop();
    return arr.length === 1 ? [-1] : answer;
}

 

 

테스트 케이스가 적어서 걸리진 않았는데 완벽한 건 아니다.

 

문제에서는 그냥 제일 작은 수를 제외시키라는 건데 나는 내림차순 정렬까지 한 경우라 조금 어긋난다.

 

보완한 식은 아래식인데 사실 내가 직접 알고 작성한 건 아니다. 

 

그런데 제출이 아래 풀이로 되어 있다. 통과된 풀이에는 Math 안 썼는데

 

function solution(arr) {
    var min = Math.min.apply(null, arr);
    var answer = arr.filter((item) => item > min);
    return arr.length > 1 ? answer : [-1];
}

 

 

내 풀이 메뉴로 들어가면 이렇게 되어있음. 당시 Math.min.apply 는 아직 낯설었을 때다.

 

참고로 프로그래머스 javascript 에서 spread operator 를 쓰면 시간 초과가 날 수도 있으니 권장하지 않는다.

 

그래서 프로그래머스 배열을 다루는 문제 중 Math의 min이나 max 의 경우

 

Math.max([ ...배열]) 보다 Math.max.apply(null, 배열) 을 추천한다.

 

 

 

 

** Java

 

 

처음에는 for 문 돌렸는데 시간 초과가 났다. stream 이 효율이 더 좋은 건 아닌데 혹시나 해서 써봤다.

신기하게도 시간 초과는 안 났다

 

그래도 시간이 어마어마하게 걸렸다.

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int min = Arrays.stream(arr).min().getAsInt();
        int[] answer = Arrays.stream(arr).filter((each) -> each > min).toArray();
        return answer.length > 1 ? answer : new int[] {-1};
    }
}

 

 

 

 

 

 

그런데 추천을 가장 많이 받은 풀이도 내 풀이와 거의 같다.

 

댓글에도 속도가 느리다고 달려있다 ㅋㅋ

 

 

 

int array 안에서 min 혹은 max 값을 구하는 방법은 갓택오버플로우를 참고하였다.

참고: https://stackoverflow.com/questions/1484347/finding-the-max-min-value-in-an-array-of-primitives-using-java

 

Finding the max/min value in an array of primitives using Java

It's trivial to write a function to determine the min/max value in an array, such as: /** * * @param chars * @return the max value in the array of chars */ private static int maxValue(char[] ...

stackoverflow.com

 

 

 

** Python

 

 

내 풀이는 아래와 같다.

 

def solution(arr):
    answer = arr
    answer.remove(min(arr))
    return answer if len(arr) > 1 else [-1]

 

 

반응형

+ Recent posts