[js] 특이한 이차원 배열 2

sookyoung.k·2024년 6월 5일
1
post-thumbnail

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

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

제한사항

  • 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
  • 1 ≤ arr의 원소의 원소 ≤ 1,000
  • 모든 arr의 원소의 길이는 같습니다.

나의 풀이

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

도저히 다른 방식 모르겠어서 이중for문 조짐

  • 바깥쪽의 for문은 2차원 배열의 행(row)을 순회
  • 안쪽의 for문은 2차원 배열의 열(column)을 순회
  • if 조건문을 통해서 현재 위치 (i, j)의 값과 대칭되는 위치 (j, i)의 값을 비교한다.
    • 두 값이 같다면 continue를 사용하여 다음 반복으로 넘김
    • 다르다면 대칭이 아니므로 함수를 종료하고 0을 반환한다.
    • 모든 반복을 통과하면 함수를 종료하고 1을 반환한다.

다른 풀이 1

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

이게.. 한 줄에 된다고... 이 풀이에서는 every()를 중첩하여 사용했다.

  • 바깥쪽 every() 메서드는 각 행(row)를 순회한다. 각 행인 r과 해당 행의 인덱스(i)가 콜백함수의 인자로 전달된다.
  • 안쪽 every() 메서드는 현재 행 r의 각 열(column)을 순회한다. 각 열의 값과 대칭되는 위치의 값을 비교한다.
  • 모든 결과가 true라면 1을, 그렇지 않을 경우 0을 반환한다.

고차함수...와우... 이렇게 쓰는 방식을 계속 공부하고 연습해봐야겠따 ㅠㅠ 하 이번주 문제 토나오는 줄 알았내 🤢

다른 풀이 2

function solution(arr) {
    const SIZE = arr.length;

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

    return 1;
}
  • 나의 풀이와 거의 유사하지만 몇 가지 다른 점이 있다.
    • 2차원 배열의 크기를 SIZE변수에 저장했다.
    • if 조건문이 다르다 두 값이 다른 조건을 넣어 다를 경우 함수를 종료하고 0을 반한다.
profile
영차영차 😎

0개의 댓글