// 방법1: 느림
var findTheDifference = function (s, t) {
let arr = t.split('');
let i = 0;
while (i < s.length) {
let index = arr.indexOf(s[i]); // 느려짐1
arr.splice(index, 1); // 느려짐2
i++;
}
return arr[0];
};
// 방법2: 이것도 느림
const findTheDifference = (s, t) => {
arrS = s.split(''); // 느려짐1
arrT = t.split('');
arrS.sort(); // 느려짐2
arrT.sort();
let i = 0;
while (i < arrT.length - 1 && arrS[i] === arrT[i]) {
i++;
}
return arrT[i];
};
// Optimal (reduce 이용)
var findTheDifference = function (s, t) {
const sum1 = s.split('').reduce((acc, cur) => acc + cur.charCodeAt(0), 0);
const sum2 = t.split('').reduce((acc, cur) => acc + cur.charCodeAt(0), 0);
return String.fromCharCode(sum2 - sum1);
};
혼자 해결은 했지만 시간 복잡도 측면에서 매우 효율이 좋지 않았다. 마지막 방법은 Discussion에서 봤음. sum2
와 sum1
의 요소를 각각 다 더해준 뒤(charCodeAt
으로 변환한 뒤) 마지막에 sum2
에서 sum1
을 뺀다면 그게 남은 알파벳은 charCode
가 될 것이라는 뜻으로 코드를 해석했다.
https://leetcode.com/problems/find-the-difference/
https://github.com/tTab1204/LeetCode/tree/main/%EC%A3%BC%EC%98%81