Cute Dog Bopping Head
본문 바로가기
Code IT/Algorithm

[프로그래머스] 2개 이하로 다른 비트 (Python)

by 찾 2023. 1. 22.

문제 설명

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

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

예를 들어,

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

  • f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.
정수들이 담긴 배열 numbers가 매개변수로 주어집니다. 
numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
  • 1 ≤ numbers의 길이 ≤ 100,000
  • 0 ≤ numbers의 모든 수 ≤ 1015

입출력 예

numbers result
[2,7] [3,11]

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

from collections import deque

def makebase(num, k): #2진수로 변환
    result = deque()
    while num > 0:
        result.appendleft(str(num%k))
        num //= k
    result.appendleft(str(num))
    return result

def solution(numbers):
    answer = []
    for num in numbers:
        base = makebase(num, 2)
        index = 0
        # 가장 마지막으로 나타나는 0을 1로 변경 (= 가장 작은 0을 1로 변경)
        # 바뀐 인덱스 그 다음 인덱스를 0으로 변경 (= 가장 큰 1을 0으로 변경)
        for i, n in enumerate(base): 
            if n == '0': 
                index = i
        base[index] = '1'
        if index+1 < len(base):
            base[index+1] = '0'
        answer.append(int(''.join(base),2))

    return answer

하루종일 백준 붙잡고 있다가

설날에 붙잡고 있는 게 너무 억울해서 프로그래머스로 노선 변경....

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ하 진짜 백준 문제들 너무 어렵고 너무 짜증나요 ㅜㅜ

미친 효율성을 내야하는 문제가 너무 많아서 머리 너무 아프고.... 진짜 뭐랄까

 

백준은... 정말.... 백준 문제들은....

내가 뭐 하나 할 때마다 사사건건 태클걸고 아닌데? 아닌데 그거 아닌뎅? ㅋㅋ 하고 약 올리면서 힌트따위 절대 안 알려주는 또라이같아

 

프로그래머스 이번 문제는 쉬웠다....

백준 풀다 오니까 너무 쉽게 풀렸어요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

풀었을 때 짜릿함까지 느낌 진짜 ㅋㅋ 하

 

설 끝나면 백준 조진다 (= 설 끝나면 백준한테 내가 조져진다)

댓글