프로그래머스 - 2개 이하로 다른 비트[시간초과]

Lumi·2021년 11월 30일
0

알고리즘

목록 보기
44/59
post-thumbnail
function solution(numbers) {
  let arr = [];

  for (let x of numbers) {
    let y = x.toString(2) + "";
    let bol = true;

    while (bol) {
      x++;
      let num = x.toString(2) + "";
      let point = 0;
      if (num.length > y.length) {
        y = "0" + y;
      }
      for (let i = 0; i < y.length; i++) {
        if (y[i] !== num[i]) {
          point++;
        }
      }
      if (point <= 2) {
        y = parseInt(num, 2);
        bol = false;
      }
    }
    arr.push(y);
  }
  return arr;
}

일단 나의 코드이다.

2문제에서 시간초과가 발생을 하였다.

일단 기본적으로 1씩 증가시킨뒤에 그것을 2진법으로 변환시켜줘서 기존의 값과 비교를 하였다.

이때 2진법으로 변환한 값이 길이가 다르면 안되기 떄문에 길이를 먼저 비교를 해준뒤에 for문을 돌려 주었다.

그후 비교를 해주었고 point변수를 통해 서로 값이 다르면 갱신해주었고

그 point값이 2이하이면 가장 작은수 중에서 다른 값이 2이하인 값이기 떄문에 그값을 도출하였다.

결과적으로 문제는 해결되지만 마지막 두개의 테스트가 통과가 되지 않았다..ㅠ

구글에서도 마지막 두개의 문제로 많은 분들이 테스트 통과가 되지 않은것 같다..ㅠ

홀수일때에도 규칙을 통해서 처리를 하면 된다고 하니

후에 시간이 되면 좀더 알아볼 생각이다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글