인프런 커뮤니티 질문&답변

안창완님의 프로필 이미지
안창완

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

4-F

4-F 질문있습니다.

해결된 질문

작성

·

16

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

비트마스킹의 허우적 거리고 있습니다. 예시를 들고 계신 부분(영상 3:19초)에서 abc 를 비트마스킹한 값을 배열에 저장해뒀다가 완전 탐색하면서 비트마스킹(7) == 경우의 수?(7)이 같으면 이것은 가능한 경우의 수라는 뜻인가요??



1주차 2주차 3주차는 시간이 지나도 다르게 풀기도하고 하는데 이 비트마스킹은 벽을 느끼고 있습니다. 어찌해야 될가 답답하네요 ㅠㅠ

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 창완님 ㅎㅎ

abc 를 비트마스킹한 값을 배열에 저장해뒀다가 완전 탐색하면서 비트마스킹(7) == 경우의 수?(7)이 같으면 이것은 가능한 경우의 수라는 뜻인가요??

-> 네 일부분 맞습니다. ㅎㅎ 정확히는 가능하다라는게 아니라 그냥 비교하는 부분인데요. 7 = 111을 뜻합니다. 이는 abc라는 단어를 배운 것이죠.

예를 들어 011, 001의 의미는 bc를 배웠어. c를 배웠어 를 의미하는것인데요.

이를 기반으로 나중에

int count(int mask) {
    int cnt = 0;
    for (int word : words) { 
        if(word && (word & mask) == word)cnt++; 
    }
    return cnt;
}

이 함수가 동작이 되어 -> 아 전체적으로 이만큼 배웠구나 이걸 기반으로 읽을 수 있는 단어의 최대값을 구하는 것이죠 ㅎㅎ

 

1주차 2주차 3주차는 시간이 지나도 다르게 풀기도하고 하는데 이 비트마스킹은 벽을 느끼고 있습니다. 어찌해야 될가 답답하네요 ㅠㅠ

-> 이진수가 익숙하지 않아서 그런 것 같습니다. 종이에다가 111 = 7, 11 = 3 이런식으로 스스로 이진수 테스팅을 하시면서 익숙해지면 괜찮아 지실거에요 ㅎㅎ 꾸준히만 해주세요 ㅎㅎ


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


0

안녕하세요, 인프런 AI 인턴입니다. 안창완님, 질문 남겨주셔서 감사합니다.

비트마스킹은 초기에 이해하는 데 어려움이 있을 수 있지만, 이해하고 나면 매우 유용한 기법입니다. 비트마스킹을 사용하면 어떤 문제는 특히 효율적으로 풀 수 있습니다. 다음은 비트마스킹의 기본 개념과 관련하여 도움이 될 수 있는 설명입니다.

비트마스킹의 기본 개념 및 활용법

  • 비트마스킹이란? 비트마스킹은 각 개체의 포함 여부를 비트로 나타내는 방식입니다. 예를 들어, 3개의 요소가 있는 집합 {a, b, c}가 있다면 각 요소를 하나의 비트로 표현할 수 있습니다. abc를 모두 포함하는 집합을 111(2진수), 즉 7(10진수)로 나타냅니다.

  • 부분 집합 검사: 예를 들면, 주어진 경우의 수가 abc의 111(7)일 때, 현재 상태가 111인지는 각 비트를 비교하여 확인합니다. 실제로 (현재 비트마스크 & 111) == 111 과 같이 비교하면 비트마스크의 부분집합 여부를 체크할 수 있는 거죠.

  • 활용 시나리오: 모든 부분 집합을 다뤄야 하는 경우에 활용할 수 있습니다. 예를 들어, n 요소로 구성된 집합의 모든 부분 집합을 조사할 때, 0부터 2^n - 1까지의 숫자를 비트마스크로 활용하면 모든 경우를 쉽게 탐색할 수 있습니다.

비트마스킹은 예를 들어, 조합 계산에서 비트 연산으로 빠르게 부분집합을 생성하여 모든 경우의 수를 처리하게 할 수 있습니다. 이는 DFS나 BFS 같은 다른 탐색 방법보다 경우에 따라서 많은 계산 시간을 줄일 수 있습니다.

관련된 추가 선택 사항으로는, 비트마스킹 관련 질문과 답변을 찾아보고 비슷한 문제를 풀어보면서 조금씩 익숙해지는 방법이 있습니다. 아래 링크를 통해 좀 더 구체적인 비트마스킹 활용 예제를 확인해 보시는 것도 추천합니다:

  1. 비트마스킹 사용에 관한 질문입니다. – 이 게시물에서는 비트마스킹을 어떻게 잘 활용할 수 있는지에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

안창완님의 프로필 이미지
안창완

작성한 질문수

질문하기