문제 설명
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의 원소의 길이는 같습니다.
입출력 예arrresult
[[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 |
입출력 예 설명
입출력 예 #1
- 예제 1번에서 문제의 조건이 잘 보이도록 표를 만들면 다음과 같습니다.ijarr[i][j]arr[j][i]
0 0 5 5 0 1 192 192 0 2 33 33 1 0 192 192 1 1 72 72 1 2 95 95 2 0 33 33 2 1 95 95 2 2 999 999
입출력 예 #2
- 예제 2번의 arr에서 arr[0][1] = 498 ≠ 63 = arr[1][0]이므로 조건을 만족하지 않습니다. 따라서 0을 return 합니다.
def solution(arr):
for i in range(len(arr)):
for j in range(len(arr)):
if arr[i][j] == arr[j][i]:
return 1
else:
return 0
처음에 이렇게 풀었는데, 틀렸다. 알고 보니 else 문에서 첫 요소들만 비교하고 있었다.(arr[0][0], arr[0][1], arr[0][2])
이 경우, return하는 즉시 코드가 종료되기 때문에, [0][0] == [0][0]이면 1이 반환되고 코드가 종료된다. 그래서 다음과 같이 코드를 변경했다.
def solution(arr):
for i in range(len(arr)):
for j in range(len(arr)):
if arr[i][j] == arr[j][i]:
return 1
return 0
그래서 다시 이렇게 풀었는데도 오류가 나서 보니, if문에서 1인 경우에 대해서는 1을 return 하는데, 위와 마찬가지로 [0][0] == [0][0] 인 순간 1이 리턴되며 코드가 종료되는 문제가 있다.
def solution(arr):
for i in range(len(arr)):
for j in range(len(arr)):
if arr[i][j] != arr[j][i]:
return 0
return 1
정답 코드
모든 경우의 수를 돌면서, 대칭 행렬이 같지 않은 경우에는 바로 0을 반환하며 코드를 종료하고, 모든 경우의 수를 돌면서 0이 나오지 않은 경우에 1을 반환한다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 문자열 겹쳐쓰기 (0) | 2024.07.09 |
---|---|
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 대소문자 바꿔서 출력하기 (0) | 2024.07.09 |
프로그래머스 >코딩테스트 연습 > 코딩 기초 트레이닝 > 간단한 식 계산하기 (0) | 2024.07.09 |
프로그래머스 > 코딩테스트 연습코딩 기초 트레이닝 > 특별한 이차원 배열 1 (0) | 2024.07.09 |