내일배움캠프 Node.js 본캠프 74일차

김선우·2024년 11월 26일
post-thumbnail

알고리즘 문제 풀어보기

2개 이하로 다른 비트

문제 설명

양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.

x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
예를 들어,

f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.

비트다른 비트의 개수
2000...0010
3000...00111

f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.

비트다른 비트의 개수
7000...0111
8000...10004
9000...10013
10000...10103
11000...10112

정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ numbers의 길이 ≤ 100,000
0 ≤ numbers의 모든 수 ≤ 1015

풀이 코드

function solution(numbers) {
    var answer = [];
    for (i = 0; i < numbers.length; i++) {
        var current = numbers[i];
        if (current % 2 === 0) {
          answer.push(current + 1);
        } else {
          current = "0" + current.toString(2);
          var totalLength = current.length;
          for (j = totalLength - 1; j >= 0; j--) {
            if (+current[j] === 0) {
              answer.push(parseInt(current.substring(0, j) + "10" + current.substring(j + 2, totalLength), 2 )
              );
              break;
            }
          }
        }
      }
    return answer;
}

풀이 과정

  • 숫자가 짝수일 때 이진수로 변환하면 마지막이 무조건 0이기 때문에 마지막 자리만 바꿔주면 되므로 1을 더한다.
  • 숫자가 홀수일 때는 이진수로 변환 후 0이 처음 나오는 자릿수를 찾고, 그 전자리수는 1이 확실하기 때문에 01을 제거하고 10을 넣어 해당 이진수를 숫자로 변환 후 answer에 더한다.

기술 면접 문제 풀어보기

12. 동기와 비동기의 차이, 블락킹과 논블락킹의 차이, 비동기와 논블락킹에 차이에 대해 설명해주세요.

  • 동기 : 한 작업이 끝나야 다음 작업이 시작되는 순차적인 처리 방식. => 작업이 완료되기 전에 다른 작업을 수행할 수 없음.

  • 비동기 : 한 작업이 끝나기를 기다리지 않고 다음 작업을 실행할 수 있음. => 작업 완료 여부와 상관없이 다른 작업을 동시에 진행할 수 있음.

  • 블락킹 : I/O 작업(파일 읽기, 네트워크 요청)을 요청할 때 해당 작업의 완료 전까지 프로그램의 실행이 멈춤. => I/O작업의 완료 전까지 다른 어떤 작업도 수행할 수 없음.

  • 논블락킹 : I/O 작업 요청 후에도 프로그램의 실행이 멈추지 않고 즉시 다음 작업으로 넘어감. => I/O 작업의 완료 여부와 상관없이 프로그램이 계속 실행 가능.

  • 비동기와 논블락킹의 차이 : 비동기의 경우 작업을 어떠한 흐름으로 처리하는지에 대한 내용이고 논블락킹의 경우 처리하는 작업이전체의 흐름을 어떻게 처리하는가(막는다, 막지않는다)에 대한 내용이다.

0개의 댓글