Problem

What I learned
- swap์ ์ถฉ์กฑํ๊ธฐ ์ํด์๋ ๋ ๋ฐฐ์ด๊ฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ด 2๊ฐ ์ฌ์ผ ํ๊ณ
- ๊ทธ ๋ถ๋ถ์ ์์น๋ฅผ ๋ฐ๊ฟจ์ ๋ ๊ฐ์์ ธ์ผ ํ๋ค.
- filter ํจ์์ ๋ฐฐ์ด์ length ๋ฅผ ํตํด ๊ฐ ํํํ๊ธฐ
- python์ counter ์, zip ํจ์
My solution
function areSimilar(A, B) {
if(A.toString() === B.toString()) return true;
const AdiffFromB = [];
const BdiffFromA = [];
A.forEach((v, i, arr) => {
if (!(v === b[i])){
AdiffFromB.push(v)
BdiffFromA.push(b[i])
}
})
bdiffFroma.reverse()
if(AdiffFromB.length === 2 && (AdiffFromB.toString() === BdiffFromA.toString())){
return true;
}
return false;
}
Solution
function areSimilar(a, b) {
const ad = a.filter((v,i)=>v!=b[i])
const bd = b.filter((v,i)=>v!=a[i])
return ad.length == 0 || (ad.length == 2 && ad.join('') == bd.reverse().join(''))
}
Python Solution
from collections import Counter as C
def areSimilar(A, B):
return C(A) == C(B) and sum(a != b for a, b in zip(A, B)) < 3
def areSimilar(A, B):
return sorted(A)==sorted(B) and sum([a!=b for a,b in zip(A,B)])<=2