CodeSignal - Arcade - Arr Similar

@p-iknow ๐ŸŽน ยท April 07, 2019

Problem
What I learned
My solution
Solution
Python Solution

Problem

image

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
@p-iknow ๐ŸŽน
๋งŽ์€ ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋” ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.