[프로그래머스] 2개 이하로 다른 비트 / JavaScript

2021. 5. 20. 17:38·Programmers
반응형

문제주소 :https://programmers.co.kr/learn/courses/30/lessons/77885

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr


<문제 설명>

더보기

문제 설명

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

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

예를 들어,

  • f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.
수비트다른 비트의 개수
2 000...0010  
3 000...0011 1
  • f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.
수비트다른 비트의 개수
7 000...0111  
8 000...1000 4
9 000...1001 3
10 000...1010 3
11 000...1011 2

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


제한사항

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

입출력 예

numbersresult
[2,7] [3,11]

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

 

<풀이법>

▒ 한줄 개념: 조건 ▒ 

이 문제는 2가지 조건으로 나누어서 풀면 되는 문제이다.

 

1. 맨 뒤 비트가 0일 때 

이 경우 단순히 맨 뒤 비트를 1로 바꿔주면 해당 수보다 큰 수 중 가장 작은 값이 된다. 

ex: 1110(14) -> 1111(15)

 

2. 맨 뒤 비트가 0이 아닐 때 

이 경우, 뒤에서 부터 첫번째로 등장하는 "01"을 찾는다. 그리고 이 부분을 "10"으로 바꿔주면 2비트만 바꾸어 만들 수 있는 가장 작은 값이 된다.

ex: 11011(27) -> 11101(29)

 

<코드(JavaScript)>

function solution(numbers) {
    var answer = [];
    numbers.forEach((number)=>{
        let str = "0"+number.toString(2);
        const l = str.length;
        if(str[l-1] === "0"){
            answer.push(number+1);
        } else {
            for(let i = str.length; i >= 0; i--){
                if(str[i] === "0"){
                    answer.push(parseInt(str.substring(0,i)+"1"+"0"+str.substring(i+2, l),2));
                    break;
                }
            }
        }
    });
    return answer;
}

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형
저작자표시 (새창열림)

'Programmers' 카테고리의 다른 글

[프로그래머스] 퍼즐 조각 채우기 / Javascript  (2) 2021.09.01
[프로그래머스] 부족한 금액 계산하기 / Javascript  (0) 2021.08.29
[프로그래머스] 다단계 칫솔 판매 / Java  (1) 2021.04.27
[프로그래머스] 로또의 최고 순위와 최저 순위 / Java  (0) 2021.04.27
[프로그래머스] 행렬 테두리 회전하기 / Java  (2) 2021.04.26
'Programmers' 카테고리의 다른 글
  • [프로그래머스] 퍼즐 조각 채우기 / Javascript
  • [프로그래머스] 부족한 금액 계산하기 / Javascript
  • [프로그래머스] 다단계 칫솔 판매 / Java
  • [프로그래머스] 로또의 최고 순위와 최저 순위 / Java
개발하는 사막여우
개발하는 사막여우
개발개발 주저리주저리
    반응형
  • 개발하는 사막여우
    개발하는 사막여우
    개발하는 사막여우
  • 전체
    오늘
    어제
    • All (311)
      • Books (13)
        • 읽기 좋은 코드가 좋은 코드다 (13)
      • Study (6)
        • Blockchain (3)
        • Algorithm (3)
      • Baekjoon (36)
      • Programmers (166)
      • LeetCode (15)
      • Open Source (1)
        • Youtube Popout Player (1)
      • Language (32)
        • Python (9)
        • JS (8)
        • Java (5)
        • HTML (6)
        • CSS (4)
      • Library & Framework (15)
        • React.js (15)
      • IDE (2)
        • IntelliJ (2)
      • Airdrop (9)
      • Tistory (2)
      • etc.. (7)
        • Cozubi (6)
        • lol-chess (0)
  • 블로그 메뉴

    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    카카오 코딩테스트
    Cozubi
    카카오 알고리즘 문제
    2018 KAKAO BLIND RECRUITMENT
    파이썬
    카카오 공채
    프로그래머스 위클리 챌린지
    programmers
    클린 코드 작성법
    백준
    읽기 좋은 코드가 좋은 코드다
    프로그래머스
    코주비
    코딩테스트연습
    Python
    Java
    클린 코드
    알고리즘문제풀이
    코인줍줍
    신규 코인 에어드랍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
개발하는 사막여우
[프로그래머스] 2개 이하로 다른 비트 / JavaScript
상단으로

티스토리툴바