본문 바로가기
Coding Test/프로그래머스

[ JavaScript / 레벨0 / 오답 ] 특별한 이차원 배열 2

by ウリ김영은 2023. 10. 21.

문제)

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의 원소의 길이는 같습니다.

입출력 예

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

 

나의 풀이-오답)

function solution(arr) {
 for(let i = 0 ; i < n ; i++){
     for(let j=0; j < n ; j++){
         if(arr[i][j] === arr[j][i]){
             if(i===n-1 && j === n-1){return 1}
             else {return 0}
         } else {return 0}
         }
     }
 }

 

내가 의도했을 풀이)

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

 

다른 풀이)

1. 

function solution(arr) {
    return arr.every((r, i) => r.every((_, j) => arr[i][j] === arr[j][i])) ? 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;
}

 

3. 

function range(start, end) {
  let value = end === undefined ? 0 : start;
  const endValue = end === undefined ? start : end;
  while (value < endValue) {
    yield value++;
  }
}

function solution(arr) {
  const n = arr.length;
  for (const i of range(n)) {
    for (const j of range(i)) {
      if (arr[i][j] !== arr[j][i]) {
        return 0;
      }
    }
  }
  return 1;
}