Question
Two arrays are called similar if one can be obtained from another by swapping at most one pair of elements in one of the arrays.
Given two arrays a
and b
, check whether they are similar.
Example
For
a = [1, 2, 3]
andb = [1, 2, 3]
, the output should beareSimilar(a, b) = true
.The arrays are equal, no need to swap any elements.
For
a = [1, 2, 3]
andb = [2, 1, 3]
, the output should beareSimilar(a, b) = true
.We can obtain
b
froma
by swapping2
and1
inb
.For
a = [1, 2, 2]
andb = [2, 1, 1]
, the output should beareSimilar(a, b) = false
.Any swap of any two elements either in
a
or inb
won't makea
andb
equal.
Input/Output
[execution time limit] 4 seconds (py3)
[input] array.integer a
Array of integers.
Guaranteed constraints:
3 ≤ a.length ≤ 105
,1 ≤ a[i] ≤ 1000
.[input] array.integer b
Array of integers of the same length as
a
.Guaranteed constraints:
b.length = a.length
,1 ≤ b[i] ≤ 1000
.[output] boolean
true
ifa
andb
are similar,false
otherwise.
MY_ANSWER
def areSimilar(a, b):
element = sorted(a) == sorted(b) #list에 같은 원소가 있는지 확인
diff = sum([i != j for i,j in zip(a,b)]) <3 # 본래 위치에서 2개의 값이 차이가 나면 swap가능
return element and diff # 그러나 3개가 넘어가면 swap 불가
list a에 있는 원소의 위치를 단 한번만 바꾸었을 때, list b가 된다면 true를 반환한다. 위치를 바꾸었을 때 두 list가 같지 않다면 false
element는 정렬을 하여 두 리스트에 동일한 원소가 있는지 확인한다.
diff는 정렬하지 않는 본래의 두 개의 리스트에 있는 원소를 비교하면서 위치를 파악
원소가 동일하더라도 위치가 차이가 3개 이상 차이가 난다면 한 번 swep을 해도 동일해 지지 않을 것이다.
Best_ANSWER
def areSimilar(A, B):
return sorted(A)==sorted(B) and sum([a!=b for a,b in zip(A,B)])<=2
- my_answer보다 간결하게 적으면 best_answer가 된다. 너무 어려워서 ㅠㅠ 답을 본 문제