문제 설명
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
부터 시작하여 대각선을 중심으로만 비교하도록 해서 통과하였다.