코딩테스트/프로그래머스 기초 트레이닝

[Javascript] 특이한 이차원 배열 2 - every()

dev_swH 2023. 6. 13. 10:44

문제 설명 : 

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

  • 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

 

나의 문제 풀이 :

function solution(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length; j++) {
            if (arr[i][j] !== arr[j][i]) {
                return 0;
            }
        }
    }
    return 1;
}

 

return 1 코드의 위치를 찾는 데 시간을 많이 썼다🤣

반복문 안에 코드를 넣어야 한다고 생각해서 그만....

 

그런데 다른 사람의 풀이를 보니

every() 메소드를 이용해서 간단하게 작성한 코드가 있었다.

지금까지 한 번도 사용해본 적이 없어서 문제를 풀 때 떠올리지 못했던 메소드였다.

function solution(arr) {
    return arr.every((r, i) => r.every((_, j) => arr[i][j] === arr[j][i])) ? 1 : 0;
}

 

every()는 콜백 함수로, 배열 안의 모든 요소가 주어진 판별함수를 통과하는지 테스트하는 메소드다.

사용 방식 :
every((element, index, array) => { ... } )

반환값 : true / false

 

every는 판별함수가 거짓을 반환하는 요소를 찾을 때까지, 배열에 있는 각 요소에 대해 한 번씩 판별함수를 실행한다.

해당하는 요소를 발견한 경우 every는 즉시 false를 반환하고

그렇지 않으면, 즉 모든 값에서 참을 반환하면 true를 반환한다.

 

참고할 수 있는 공식 문서

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/every

 

Array.prototype.every() - JavaScript | MDN

every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다. Boolean 값을 반환합니다.

developer.mozilla.org

 

위의 풀이는

every() 메소드를 중첩시켜서 내가 for 반복문을 중첩한 것과 같이 적용했다.

기회가 있으면 나도 다음에 이 메소드를 사용해봐야겠다!