특별한 이차원 배열 2

nacSeo (낙서)·2024년 3월 26일
0

프로그래머스

목록 보기
135/169

문제 설명

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

나의 코드

  • 첫 번째 코드
class Solution {
    public int solution(int[][] arr) {
        int answer = 0;
        for(int i=0; i<arr.length; i++) {
            for(int j=0; j<arr[i].length; j++) {
                if(arr[i][j]==arr[j][i]) answer = 1;
            }
        }
        return answer;
    }
}

  • 최종 코드
class Solution {
    public int solution(int[][] arr) {
        int answer = 1;
        for(int i=0; i<arr.length; i++) {
            for(int j=i+1; j<arr[i].length; j++) {
                if(arr[i][j]!=arr[j][i]) answer = 0;
            }
        }
        return answer;
    }
}

느낀 점

처음엔 단순히 이중반복문을 통해 arr[i][j]==arr[j][i]일 때만 비교하면 될 줄 알았는데 테스트를 실패했다. 문제의 조건을 다시 확인해보면, 주어진 2차원 배열 arr의 행렬이 대칭(symmetric) 인지 아닌지를 확인해야 한다. 따라서, 각 요소 arr[i][j]와 그에 대응하는 요소 arr[j][i]를 비교하여 대칭인지 확인해야 한다는 것이다.
최종 코드에서는 대칭 여부를 확인하기 위해 대각선을 중심으로 비교하고, 만약 대칭이 아닌 경우에는 즉시 0을 반환한다. 대칭인지 확인하기 위해서는 하나의 대각선을 중심으로만 비교하면 되므로, 내부 루프를 i+1부터 시작하여 대각선을 중심으로만 비교하도록 해서 통과하였다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글