BOJ 2885 - 초콜릿 식사

SJ0000·2022년 7월 6일

문제 링크

어디까지 쪼개야 K를 만들 수 있을지는 입력받은 숫자를 이진수로 바꾸면 쉽게 알 수 있다.
예를 들어 1023인 경우 1024를 1이 될 때 까지 잘라야 만들 수 있다.
1023을 이진수로 나타내면 1111111111 이다. (1024를 10번 자름)
1022인 경우 1024를 2가 될 때 까지 잘라야 만들 수 있다.
1022를 이진수로 나타내면 1111111110 이다. (1024를 9번 자름)

입력받은 숫자를 이진수로 만들고 마지막 1이 나올 때까지 자르면 원하는 숫자를 만들 수 있다.
10001010 처럼 중간에 0이 있을 수도 있는데, 마지막 1에 도달하기 위해서는 0이어도 잘라야 하니 고려하지 않아도 된다.

import sys


def read():
    return sys.stdin.readline().rstrip()


def solution(k):
    n = 0
    while 2**n < k:
        n += 1
    if 2**n == k:
        print(k, 0)
        return

    binary = bin(k)[2:]
    last_one_index = -1
    for i in range(len(binary)-1, -1, -1):
        if binary[i] == '1':
            last_one_index = i
            break
    print(2**n, last_one_index+1)


K = int(read())
solution(K)
profile
잘하고싶은사람

0개의 댓글