반응형
출처: 프로그래머스 코딩 테스트 연습, 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 값을 구하는 방법은 갓택오버플로우를 참고하였다.
** Python
내 풀이는 아래와 같다.
def solution(arr):
answer = arr
answer.remove(min(arr))
return answer if len(arr) > 1 else [-1]
반응형
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2021.08.09 |
---|---|
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2021.08.09 |
[프로그래머스] 짝수와 홀수 (0) | 2021.08.03 |
[프로그래머스] 콜라츠 추측 (0) | 2021.08.03 |
[프로그래머스] 최대공약수와 최소공배수 (0) | 2021.08.03 |