문제 설명
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 |