| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Qualification Round
- 리트코드
- K8S
- 파이썬
- 3D PRINTING
- leetcode
- 하늘과 바람과 별과 詩
- ProblemSolving
- 2022
- swift
- Code Jam
- GitLab
- hackerrank
- 문제해결
- First Unique Character in a String
- MySQL
- LEVEL 2
- 하늘과 바람과 별과 시
- 코딩테스트
- Kubernetes
- 해커랭크
- C++
- 프로그래머스
- Python
- 알고리즘
- Code Jam 2022
- Algorithm
- Certbot/dns-route53
- Count Monobit Integers
Archives
- Today
- Total
공대생의 비망록
[LeetCode][Easy] Count Monobit Integers 문제 Python 풀이 본문
Programming Language/Python
[LeetCode][Easy] Count Monobit Integers 문제 Python 풀이
myungsup1250 2026. 2. 8. 17:51주어진 n에 대하여 0부터 n까지 "0" 혹은 "1"으로만 비트가 구성되어 있는 정수 (Monobit Integer)를 구하는 문제.
처음에는 모든 비트가 같아야 한다는 점에 착안, 0부터 n까지 모든 수를 비트 문자열로 만들어 XOR 비트 연산을 수행하여 문제를 해결하도록 구현하였으나 매우 비효율적이었고, 그 후로
초기 방법 (모든 수를 비트 문자열로 생성하여 XOR 연산):
class Solution:
def countMonobit(self, n: int) -> int:
if n == 0:
return 1
bitified = ["0"]
for i in range(1, n + 1):
m = i
bit = ""
while m > 0:
if m % 2 == 1:
bit += "1"
else:
bit += "0"
m //= 2
bitified.append(bit)
cnt = 0
for bit in bitified:
comp1 = ""; comp2 = ""
for i in range(len(bit)):
comp1 += "0"
comp2 += "1"
if int(comp1) ^ int(bit) == 0 or int(comp2) ^ int(bit) == 0:
cnt += 1
return cnt
첫 번째 개선 버전 (n의 비트 길이를 계산하여 그 길이만큼의 Monobit Integers의 경우의 수를 계산하여 답을 반환):
class Solution:
def countMonobit(self, n: int) -> int:
if n == 0:
return 1
max_len = 0; tmp = n
while tmp > 0:
tmp //= 2
max_len += 1
bit = ""
for i in range(max_len):
bit += "1"
if n < int(bit, 2):
return max_len
else:
return max_len + 1
추가 개선 버전 (n의 비트 길이 계산을 python 함수로 해결하고 실제 비트 문자열을 만들지 않고도 해결하도록 개선):
class Solution:
def countMonobit(self, n: int) -> int:
if n == 0:
return 1
max_len = n.bit_length()
if n < (1 << max_len) - 1:
return max_len
else:
return max_len + 1
'Programming Language > Python' 카테고리의 다른 글
| [LeetCode][Easy] First Unique Character in a String 문제 Python 풀이 (0) | 2026.02.09 |
|---|---|
| [LeetCode][Easy] Valid Anagram 문제 Python 풀이 (0) | 2026.02.08 |
| [LeetCode][Easy] Single Number 문제 Python 풀이 (0) | 2026.02.08 |
| [LeetCode][Easy] Missing Number 문제 Python 풀이 (0) | 2026.02.08 |
| [LeetCode][Easy] Move Zeroes 문제 Python 풀이 (0) | 2026.02.08 |
Comments
