0Pricing
Coding Interview Prep · 강의

비트마스크 부분집합 열거

정수를 사용해 모든 부분집합을 순회합니다

비트마스크 부분집합 열거은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

부분집합을 숫자로 나타내기

n개 항목의 모든 부분집합은 하나의 정수로 나타낼 수 있습니다. 0부터 세어 올라가면 각 정수의 비트가 어떤 항목을 포함할지 정확히 선택합니다. 🙂

부분집합은 몇 개일까요

n개의 항목으로 이루어진 집합에는 2^n개의 부분집합이 있습니다. 따라서 정수를 0부터 2^n에서 1을 뺀 값까지 순회하면 모든 부분집합을 정확히 한 번씩 방문하게 됩니다.

for mask in range(1 << n):
    pass  # mask is one subset

1 << n은 개수입니다

시프트 연산 1 << n은 2의 n제곱과 같습니다. 부분집합을 순회할 때 상한을 표현하는 가장 간결하고 빠른 방법입니다.

비트 i 읽기

항목 i가 부분집합에 포함되어 있는지 확인하려면 mask와 i만큼 왼쪽으로 시프트한 1을 사용해 해당 비트를 검사합니다. 결과가 0이 아니면 항목이 포함된 것입니다.

if mask & (1 << i):
    take(items[i])

선택된 목록 만들기

각 비트 위치를 살펴보면서 비트가 설정된 항목을 모읍니다. 그러면 하나의 마스크를 그 마스크가 나타내는 실제 부분집합으로 바꿀 수 있습니다.

chosen = [items[i] for i in range(n) if mask & (1 << i)]

공집합과 전체 집합

마스크 0은 공집합이고, 모든 비트가 1인 마스크는 전체 집합입니다. 순회 과정에서 모든 값을 다루므로 두 경우 모두 별도의 처리 없이 포함됩니다.

부분집합의 합 구하기

반복문 안에서 선택된 항목을 더해 각 부분집합의 점수를 계산합니다. 이는 여러 작은 완전 탐색 풀이의 핵심입니다.

total = sum(v[i] for i in range(n) if mask & (1 << i))

설정된 비트 수 세기

선택된 항목의 수는 마스크의 설정된 비트 수와 같습니다. Python에서는 bin(mask).count('1')로 즉시 구할 수 있습니다.

size = bin(mask).count("1")

한계 확인하기

부분집합이 2^n개이므로 이 기법은 작은 n에만 적합합니다. 모든 경우를 열거할 때 실용적인 상한은 대략 n이 20인 경우입니다.

비트마스크가 좋은 이유

하나의 정수 반복문으로 복잡한 중첩 반복문을 대신할 수 있고, 비트 연산은 빠릅니다. 코드가 짧고 명확하며 테스트하기도 쉽습니다.

재사용 가능한 패턴

마스크를 순회하고, 비트를 해석하고, 부분집합의 점수를 계산한 다음 최댓값을 추적합니다. 이 틀을 기억해 두면 많은 부분집합 문제가 일상적인 문제처럼 풀립니다.

확인 문제

mask로 표현된 부분집합에 항목 i가 포함되어 있는지 검사하려고 합니다.

복습

마스크를 0부터 2^n에서 1을 뺀 값까지 순회하고, mask와 왼쪽으로 시프트한 1로 비트를 읽은 뒤 각 부분집합의 점수를 계산합니다. 작은 n에 적합한 깔끔한 완전 탐색입니다. 🚀

자주 묻는 질문

“비트마스크 부분집합 열거” 강의는 무료인가요?

네 — “비트마스크 부분집합 열거” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“비트마스크 부분집합 열거”에서 뭘 배우나요?

정수를 사용해 모든 부분집합을 순회합니다 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“비트마스크 부분집합 열거” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 완전 탐색도 유효한 전략입니다
  2. itertools로 열거하기
  3. 비트마스크 부분집합 열거
  4. 탐색 공간을 영리하게 줄이기
← Coding Interview Prep(으)로 돌아가기