본문 바로가기
알고리즘/Programmers

[TIL] 2023.08.02 Programmers_특별한 이차원 배열 2

by heereal 2023. 8. 2.

특별한 이차원 배열 2

문제 설명

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

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

 

입출력 예

arr result
[[5, 192, 33], [192, 72, 95], [33, 95, 999]] 1
[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]] 0

입출력 예 #1

  • 예제 1번에서 문제의 조건이 잘 보이도록 표를 만들면 다음과 같습니다. 조건을 만족하므로 1을 return 합니다.
i j arr[i][j]  arr[j][i]
0 0 5 5
0 1 192 192
0 2 33 33
1 0 192 192
1 1 72 72
1 2 95 95
2 0 33 33
2 1 95 95
2 2 999 999

입출력 예 #2

  • 예제 2번의 arr에서 arr[0][1] = 498 ≠ 63 = arr[1][0]이므로 조건을 만족하지 않습니다. 따라서 0을 return 합니다.

 

나의 풀이

function solution(arr) {
    for (const i in arr) {
        for (const j in arr[i]) {
            if (arr[i][j] !== arr[j][i]) return 0;
        }
        return 1;
    }
}

이중 for문으로 `arr[i][j] !== arr[j][i]`라는 조건에 걸리지 않고 모두 통과했을 경우에만 1을 return 하도록 했다.

 

 

다른 사람의 풀이

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

`every()` 메서드는 처음 보는데 배열 안의 모든 요소가 주어진 판별 함수를 모두 통과하는지를 boolean 값으로 출력한다고 한다. 삼항연산자의 조건문에 `every()` 메서드를 이중으로 사용해서 판별 함수를 모두 통과했을 때 1을, 아니라면 0을 반환한다.

 

 


Array.prototype.every()

const isBelowThreshold = (currentValue) => currentValue < 40;

const array1 = [1, 30, 39, 29, 10, 13];

console.log(array1.every(isBelowThreshold));
// Expected output: true

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

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

 

댓글