본문 바로가기
코딩테스트 연습

특별한 이차원 배열 2

by 신재은👩🏼‍💻 2024. 4. 10.

문제 설명

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

class Solution {
    public int solution(int[][] arr) {
        // arr 내의 i, j를 서로 바꿨을 때 나오는 값이 같으면 1리턴
        // 아니면 0리턴
        int answer = 0;
        
        for(int i=0; i<arr.length; i++) {
            // 0, 1, 2...
            for(int j=0; j<arr.length; j++) {
                if(arr[i][j] != arr[j][i]) {
                    return answer = 0;
                }
            }
            
        }
        answer = 1;
        
        return answer;
    }
}


내가 비교를 해 보고 싶은 코드는

mport java.util.stream.*;

 

class Solution {

    public int solution(int[][] arr) {

        return IntStream.range(0, arr.length).allMatch(i -> IntStream.range(i + 1, arr.length).allMatch(j -> arr[i][j] == arr[j][i])) ? 1 : 0;

    }

}

얘다.

 

코드를 딱 봤을 때 바로 내가 구현할 수 있을 정도로 머릿속에 그려지진 않는데

왜 저러는지는 이해를 한다.

문제는 특정 배열이 대칭 행렬인지 확인하려 한다.

그걸 일일이 확인한 게 내 코드인데

위 코드는 그 확인을 더 효율적으로 한다.

 

기본적으로 대칭 행렬은 대각선 부분은 비교를 안 해도 된다.

그래서 i+1 코드가 있는 것.

 

1 2 3
2 4 5
3 5 6

allMatch로 조건 확인을 한다.

그러면 1, 4, 6은 i와 j의 인덱스 값이 같으니 비교하지 않는다.

외부 스트림에서 i가 0으로 잡혔다면 내부 스트림에서는 j를 i+1, 즉 1로 잡아서

2와 3만 [i][j] == [j][i] 비교시키면 된다.

 

크...

'코딩테스트 연습' 카테고리의 다른 글

0 떼기  (0) 2024.04.10
배열 만들기 3  (0) 2024.04.10
특별한 이차원 배열 1  (0) 2024.04.10
배열 비교하기  (0) 2024.04.10
배열의 원소 삭제하기  (0) 2024.04.10