티스토리 뷰
You will be given a list of integers, arr, and a single integer k. You must create an array of length k from elements of arr such that its unfairness is minimized. Call that array subarr. Unfairness of an array is calculated as
max(subarr) - min(subarr)
Where:
- max denotes the largest integer in subarr.
- min denotes the smallest integer in subarr.
As an example, consider the array [1, 4, 7, 2] with a k of 2. Pick any two elements, test subarr = [4, 7].
unfairness = max(4, 7) - min(4, 7) = 7 - 4 = 3
Testing for all pairs, the solution [1, 2] provides the minimum unfairness.
Note: Integers in arr may not be unique.
풀이
function maxMin(k, arr) {
let minUnfairness = Number.MAX_SAFE_INTEGER;
arr.sort((a, b) => a - b);
for(let i = 0; i < arr.length; i++) {
let unfairness = arr[i+k-1] - arr[i];
if(unfairness === 0) {
minUnfairness = 0;
break;
}
if(minUnfairness > unfairness) {
minUnfairness = unfairness;
}
}
return minUnfairness;
};
1. 최소차이값을 넣어줄 변수 minUnfairness를 선언하고, 가장 큰 (안전한) 정수를 넣어줌.
2. arr를 정렬함(arr에서 임의의 수 k개를 뽑는 거지만, 숫자가 작을 수록 차도 작을 가능성이 크니까)
3. for문으로 k개의 수 중 가장 큰 값과 현재값을 빼주고 unfairness 변수에 담음(정렬되어 있으니 당연히 제일 큰 값이 arr[i+k-1]겠져)
4. 만약에 unfairness가 0이면 당연히 젤 작을테니 for문을 끝내고 minUnfairness를 0으로 반환하며 턴을 마침
5. 만약 unfairness가 현재 가장 최소차이 값인 minUnfairness보다 작다면, minUnfairness 값을 unfairness로 갱신해줌
6. minUnfairness를 반환함
테스트 케이스를 모두 통과했는데 14번만 자꾸 실패가 뜨는 것은 해커랭크의 문제인것인가. Success라매요
다른 사람의 풀이
function maxMin(k, arr) {
arr = arr.sort(function (a, b) {
return a - b;
});
var resultArr = []
for (var i = 0; i + k <= arr.length; i++) {
var max = arr[i + k - 1];
var min = arr[i];
resultArr.push(max - min);
}
var min = resultArr.reduce(function (a, b) {
return Math.min(a, b);
});
return min;
};
정렬까지는 나랑 똑같은데, 결과 배열을 생성해서 차이 값을 모두 새로운 배열에 넣어줌. 그리고 나서 최소값을 reduce를 이용해 뽑아냈음.
reduce를 쓰지않고 Math.min을 이용해서 아래처럼 쓰면 더 간단할거같음!
Math.min.apply(null, resultArr);
'1Day 1Algorithm' 카테고리의 다른 글
[DAY 11] Jim and the Orders (0) | 2019.10.12 |
---|---|
[DAY 10] Balanced Brackets @ (0) | 2019.10.10 |
[DAY 8] Greedy Florist (0) | 2019.10.08 |
[DAY 7] A Very Big Sum (0) | 2019.10.07 |
[DAY 6] Recursion: Fibonacci Numbers (0) | 2019.10.06 |
- Total
- Today
- Yesterday
- js
- 알고리즘
- 구간합
- sort
- sort()
- javascript
- 자바스크립트
- 멀티프로그래밍
- Webpack
- Typescript
- 컴퓨터공학
- 리액트
- 자료구조
- 1day1algorithm
- Array
- Props
- 우아한테크러닝
- reduce()
- OS
- 시분할시스템
- 웹팩
- 배열
- greedyAlgorithm
- Algorithm
- 타입스크립트
- 운영체제
- 프로그래머스
- React
- 배치처리시스템
- redux-saga
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |