[Leetcode] 1720. Decode XORed Array (JS) *알고리즘 공부 방법*

OROSY·2021년 4월 29일
0

Algorithms

목록 보기
13/38
post-thumbnail

출처

Leetcode 1720. Decode XORed Array

문제

나의 코드

머리 털나고 처음 보는 연산자 XOR, 문제를 읽자마자 전혀 이해가 가지 않았다. 나의 부족한 영어 실력을 탓하고 열심히 구글링을 하고 찾아본 MDN 문서는 정말 외계어 같은 설명만 늘어놓고 앉아있었다..

예시라고 보여준 것들도 비전공자의 눈엔 까만 것은 숫자요.. 회색은 화면이니..
도저히 14하고 9를 어떻게 계산해도 7이 나오지 않는데 대체 어떻게 이러한 결과가 나오는지 이해가 가지 않았다ㅠ 그래서 도움을 받은 것이 seungsang00님의 글이었다.

나와 비슷한 고민을 하셨던 분이 미리 답을 알고 계셔서 쉽게 해결하게 되었지만, 이런 문제가 나올 때에는 바로 검색을 하지 말고 혼자 오래 고민을 해보는 것도 필요하겠다 생각하게 되었다!

어쨌든, 이 비트연산자(XOR)는 2진수로 생각을 해야되는 것이었다. 결국, 위의 예시를 보면 9의 2진수는 1001이고 14는 1110이다. 여기서 XOR은 위의 그림처럼 두 값이 같으면 0을 반환하고 다르면 1을 반환하는 연산자다.

따라서 9와 14의 2진수를 연산하면, 1001 ^ 1110 = 0111이 반환되는 것이다. 0111은 10진수로 7이므로 9 ^ 14 = 7가 나오는 것이다.

결국, 나에게 부족한 것은 CS 지식, 코딩 실력, 모르면 바로 검색하는 끈질김의 부족이랄까^^? 아무튼 이번 기회로 알고리즘의 공부 방법에 대해서 다시 한번 고민하게 되었으니 좋은 동기부여가 되었다고 생각하려 한다..

1
2
3
4
5
6
7
8
9
10
11
12
var decode = function(encoded, first) {
    const len = encoded.length + 1
    const result = new Array(len)
    for (let i = 0; i < len; i++) {
        if (!i) {
            result[i] = first
        } else {
            result[i] = encoded[i - 1] ^ result[i - 1]
        }
    }
    return result
};
cs

실행 결과

profile
Life is a matter of a direction not a speed.

0개의 댓글