목표 Byte를 hex 문자로 출력한다. 암호화(Hashing) 코드를 보다가 private static String get_SecurePassword(String passwordToHash, byte[] salt){ String generatedPassword = null; try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(salt); byte[] bytes = md.digest(passwordToHash.getBytes()); StringBuilder sb = new StringBuilder(); for(int i=0; i< bytes.length ;i++) { sb.append(Integer.toString((bytes..
Hamming Distance 문제 내용 Hamming Distance를 구하라 접근 방법 Hamming distance는 기본적으로 두개의 integer를 bit로 변환했을 때, 몇개의 bit가 다른지 알아내는 문제이다. 예를 들어 2진수로 110001101 111000011 이 있다고 하면 다른 값은 위의 붉은색이 된다. 즉, 두개의 값의 차이가 나는 값, XOR로 대표 될 수 있다. 위의 값을 XOR해보자. 001001110 이 된다. 이제 1의 갯수를 구하면 답이 된다. 가장 쉬운 방법은 1bit씩 오른쪽으로 shift하면서 끝 값이 1인지만 확인 하면 된다. var hammingDistance = function(x, y) { let xor = x ^ y; let count = 0; while(..
bit operation이 모여있는 사이트를 찾았다. http://graphics.stanford.edu/~seander/bithacks.html 이 사이트에 있는 내용을 남긴다. 특정 Value의 sign 값을 찾는 방법 if문을 사용하지 않고 특정 value의 sign을 찾는 방법이다. (value > 0) - (value < 0) 으로 음수일 경우 -1, 0일경우 0, +1 일경우 +1이 return 되는 방법이다. const value4 = -1; const value = 0; const value2 = 1; const value3 = 2; console.log(-(value < 0)); console.log(-(value2 < 0)); console.log(-(value3 < 0)); conso..
2021.05.02 - [Problem Solving] - 2진수 최 우측 1의 자리 찾아내기 우측 찾기에 이어서 최 좌측 1자리를 찾을 일이 있어서 Blog를 남겨 본다. 가장 쉬운 방법은 while(1 >1; } 일 것이다. 이것은 O(N)이 필요 함으로 속도를 높이는 방법을 찾아 보자. ori |= (ori >> 1); ori |= (ori >> 2); ori |= (ori >> 4); ori |= (ori >> 8); ori |= (ori >> 16); return ori - (ori>>1) 위는 O(Log N)의 속도로 가장 좌측 1을 찾게 되는 방법이다. 기본적인 아이디어는 copy and paste다. 10000001 이 있을 경우 1b..
앞서 Segment Tree를 알아 보았다. 2021.05.02 - [Problem Solving] - Segment Tree 그런데 생각보다 개발량도 많고 필요할때 바로 만들어서 쓴다는게 쉽지 않다. 그래서 Binary Indexed Tree를 알아보고자 한다. Binary Indexed Tree는 크게 2개의 Array가 필요하다. N+1 Size의 오리지널 Array N+1 Size의 Fenwick Tree Array 오리지널 Array는 입력하고자 하는 Array 그 자체라고 생각하면된다. [1,3,5,7,9,11,13,15] 라는 배열이 있다면 이것을 Original Array = [NA,1,3,5,7,9,11,13,15] 로 유지 하는 것이다. NA가 들어가는 이유는 첫번째 Value를 1이라..
어떤 Integer가 주어졌을 경우 해당 Integer의 가장 우측에 존재하는 1의 위치를 찾고자 한다면 다음과 같이 하면 된다. N & -N 6을 예로 들어보겠다. 6의 2진수는 0000 0110 이 된다. 해당 값을 음수로 변환하면 (보수 처리 하고 마지막 1을 더하면 음수이다.) 1111 1010 이 된다. And 처리를 하면 0000 0010 이 되고 가장 우측 위치 값은 2가 된다.