주어진 문제

매개변수로 숫자 타입을 가지는 어레이만 주어지고 그 어레이가 숫자 크기대로 sort 되어 있는지를 체크해서 true 혹은 false 값을 반환 하는 알고리즘을 짜면 된다.

내 해답

난 배열의 원소를 다음 원소들과 비교하는 방식으로 함수를 짰다. 처음에는 어레이를 sorting 하는 방식을 생각해서 하려고 했는데 뭔가 문제가 있었는지 자꾸 코드워 자체 테스트에서 fail이 나서 이 방식을 사용했다.

1
2
3
4
5
6
7
8
function inAscOrder(arr) {
for (let i=0; i<arr.length;i++) {
if (arr[i+1]<arr[i]) {
return false;
}
}
return true;
}

다른 분들의 솔루션

  1. 배열 카피하는 방식
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function inAscOrder(arr) {
    var copy = arr.slice();
    copy.sort((a, b) => a -b); //
    for(let i = 0; i < copy.length; i++) {
    if(copy[i] !== arr[i]) {
    return false;
    }
    return true;
    }
    }

사실 내가 바랬던 형식은 위의 방식이였다. 매개변수 배열을 카피해서 그 배열을 sort한 뒤에 그 배열의 원소를 하나씩 비교하는 방식이 뭔가 더 논리적으로 알맞을 것 같았다.

  1. every 함수 방식
1
2
3
4
5
6
7
8
9
function inAscOrder(arr) {
return arr.every((item, index) => {
if (index) {
return item > arr[index - 1];
} else {
return true;
}
});
}

음… 요새 너무 공부를 안 했나 보다… every를 왜 썼는지는 알겠지만 내 방식대로 코드를 짜야 하는데 생각이 잘 나지 않는다… ㅠㅠ

정리

오늘의 문제와 다른 천재들의 알고리즘을 보면서 공부할 것들은 every 함수의 응용에 대한 부분 같다.
좀 시간이 급해서 테스트 코드나 여러 코드들은 잘 보지 못 했지만 이 부분은 조금 더 보충해야 할 필요가 있을 것 같다. 게다가 요즘 리액트에 신경 쓰다 보니 바닐라 자바스크립트 부분을 신경 쓰지 못 하다 보니 점점 실력이 주는 것 같기도 하고 말이다.