MileMoa
Search
×

Leetcode 문제 질문

doomoo, 2019-06-21 00:34:47

조회 수
467
추천 수
0

마일모아에서 이런걸 여쭤볼거라고는 생각 못했는데 여기 말고는 물어볼 데가 없어서...

 

Leetcode 477번 Total Hamming Distance 라는 문제가 있습니다.

 

풀이를 찾아보니...

 

    int totalHammingDistance(vector<int>& nums) {

        int res = 0, n = nums.size();

        for (int i = 0; i < 32; ++i) {

            int count = 0;

            int mask = 1 << i;

            for (int num : nums) {

                if (num & mask) ++count;

            }

            res += count * (n - count);

        }

        return res;

    }

 

이렇게 나와있는데요, 노란줄이 도대체 이해가 안갑니다. set bit의 갯수와 unset bit의 갯수를 곱하는게 무슨 의미가 있는지?

 

아시는 분 설명 좀 부탁드립니다.

5 댓글

많이사

2019-06-21 00:47:34

원래 문제가 뭔지 모르겠지만 그냥 추측컨대, 모든 pair를 찾아서 각 pair의 distance를 sum 하는게 아니라 각 bit 별로 "다른" 페어들의 갯수를 구해서 최적화 한 것 같은데요. 예를 들어 0이 2개고 1이 4개면 디스턴스의 총 합을 6*5/2 페어를 돌아가며 계산해서 세는게 아니라 0 갯수 * 1 갯수 = 8 이런식으로 계산한 것 같습니다.

커피

2019-06-21 00:50:24

문제에서 요구하는 것은 n개의 수를 입력 받아서 nums[0], nums[1], ..., nums[n-1]의 binary representation으로 나타냈을 때 pairwise hamming distance를 구해서 총합을 구하는 것인데, 이 요구대로 정직하게 (i = 0 .. n-2 & j = i+1 .. n-1) 2중 for-loop을 이용하여 hamming_dist(nums[i], nums[j]) 를 더하는 방법이 있을테구요

본문에 적어주신 방법은 그보다 효율적으로 답을 구하는 방법입니다.

첫 번째 for loop 보시면 i를 [0, 31]까지 올리면서 입력으로 받은 n개의 정수 (nums)의 i번째 bit이 set 된것과 unset된 것의 개수를 셉니다.

정확히는 count variable에 i번째 bit이 set된 개수 (이 값은 0 이상 n이하 이겠죠)가 될거고, 

각 i에 대해서 count * (n - count)가 나타내는 quantity는 우리가 최종적으로 구하고 싶은 전체 hamming distance 총합을 

0번째, 1번째, .., 31번째 비트로 쪼개서 구해서 더했다고 생각하면 됩니다.

예를 들면 문제에서 나온대로 4, 14, 2의 경우 2진수로 나타내면 (편의상 4개씩 끊어서 적었습니다)

0000 0000 0000 0000 0000 0000 0000 0100 = 4

0000 0000 0000 0000 0000 0000 0000 1110 = 14

0000 0000 0000 0000 0000 0000 0000 0010 = 2

이렇게 될텐데, 가장 우측부터 i = 0일 때 부터 count * (n - count)를 살펴보면
i = 0: 0 * 3 = 0
i = 1: 2 * 1 = 2
i = 2: 2 * 1 = 2
i = 3: 1 * 2 = 2
i = 4, ... 31: 0 * 3 = 0
해서 총 합이 6이 됩니다 (실제 정답도 6이죠).
 
조금 더 수식(?)스럽게 설명하자면 Hamming Distance ( x, y ) = (sum over i = 0, ...., 31) Hamming Distance (x & (1<<i), y & (1<< i)) 라는 성질을 이용했다고 보시면 됩니다 (hamming distance 정의를 이용하면 거의 자명한 성질이죠).
 
 

US빌리언달라맨

2019-06-21 01:00:28

이게 수학 문젠가요? 언제 배우는건가요?  궁금해서 여쭤 봅니다

armian98

2019-06-21 00:53:06

문제가 숫자들 간의 hamming distance의 총 합을 구하는 것인가봅니다. hamming distance면 bit이 다를 때 1씩 올라가는 건데, 각 bit에 대해서 그 bit이 0인 숫자들의 갯수 (n - count)랑 1인 숫자들의 갯수 (count)들 간에만 거리가 1 생기니까 그 bit에서 생기는 거리의 총 합이 count * (n - count)가 되네요. (count) 숫자들이랑 (n - count) 숫자들로 pair를 만들 수 있는 방법의 수라고 생각하시면 될 것 같습니다.

얼마에

2019-06-21 01:07:35

#이과망했으면

목록

Page 1 / 3818
Status 번호 제목 글쓴이 날짜 조회 수
  공지

마적단의 기초 | 검색하기 + 질문 글 작성하기

| 정보 33
  • file
ReitnorF 2023-07-16 34382
  공지

게시판의 암묵적인 규칙들 (신규 회원 필독 요망)

| 필독 110
bn 2022-10-30 58379
  공지

리퍼럴 글은 사전동의 필요함 / 50불+ 리퍼럴 링크는 회원정보란으로

| 운영자공지 19
마일모아 2021-02-14 79231
  공지

게시판 필독 및 각종 카드/호텔/항공/은퇴/기타 정보 모음 (Updated on 2024-01-01)

| 정보 180
ReitnorF 2020-06-25 187543
updated 114540

손흥민 글타래 하나 만들어요

| 잡담 1388
jeong 2020-10-27 78002
new 114539

Amex Plat businss 35% 받으려면 꼭 비지니스 카드로 차지 해야 하나요?

| 질문-카드 3
Monica 2024-05-15 102
new 114538

대학선택(편입) 조언부탁드립니다.

| 질문-기타 26
일체유심조 2024-05-15 831
new 114537

다들 스펜딩 어떻게 채우시나요?

| 질문-카드 67
딸램들1313 2024-05-15 1597
updated 114536

초보자를 위한 코너: 아무거나 물어보세요 + 아무나 답변해 주세요

| 잡담 3383
  • file
shilph 2020-09-02 75675
new 114535

갑자기 한시간전 부터 각종 subscription 이메일이 들어오고 크레딧카드가 바로 해킹되었어요 뭘 어떻게 해야할까요?

| 질문-기타 6
trip 2024-05-15 412
updated 114534

(2024 카드 리텐션 DP 모음) 카드사 상관없이 남겨주세요

| 정보-카드 4180
24시간 2019-01-24 200316
new 114533

회사 지원금을 통한 HSA HDHP 보험 선택시 제 경우도 괜찮을 까요?

| 질문-기타 12
솜다리 2024-05-15 290
new 114532

[여권 만료 질문] 캔쿤에 가려고 하는데요

| 질문-기타 4
이또한기회일까 2024-05-15 154
updated 114531

지붕을 교체해야 할것 같은데 메릴렌드쪽에 믿을만한 회사 추천 부탁드려요.

| 질문-기타 8
그리스 2024-05-14 669
new 114530

JetBlue 를 5번 이상 이용하신 분들, 아무 문제 없으셨습니까?

| 질문-항공 14
us모아 2024-05-15 761
new 114529

자녀 대학교 입학을 위한 College Prep Consulting

| 질문-기타 16
가데스 2024-05-15 1193
updated 114528

한국식당에서 험한말 하는 주변손님 대처 어떻게 하시나요?

| 질문-기타 25
에덴의동쪽 2024-05-13 3936
new 114527

[5/15/24] 발빠른 늬우스 - Bilt/빌트, 알라스카 마일 전환 시작

| 정보-카드 12
shilph 2024-05-15 795
updated 114526

스위스 3일 일정 질문입니다.

| 질문-여행 9
씨유 2024-05-14 631
updated 114525

아플 (Amex Platinum) 175k offer 역대최고 오퍼 ($8,000 스펜딩)

| 정보-카드 67
신발수집가1 2024-04-04 9642
new 114524

401K 어디에 투자해야 하는지 질문드립니다.

| 질문-은퇴 6
  • file
리베카 2024-05-15 682
updated 114523

Last call: IHG 비지니스 카드 최대 175,000 포인트 오퍼 (5/16/2024, 7AM EST)

| 정보-카드 12
마일모아 2024-05-14 1332
updated 114522

새차 수리 중 딜러에서 충돌사고 낸 후 처리

| 질문-기타 32
  • file
영원한노메드 2024-05-13 2751
new 114521

집에 도둑이 들면 어떤 방식으로 해결을 해야 하나요?

| 질문-기타
ylaf 2024-05-15 535
updated 114520

런던/에딘버러 여행 후기 (팁 추가)

| 여행기 12
  • file
파노 2024-05-07 1071
updated 114519

뉴욕 파크 하얏트 포인트 방이 없을 경우 어떻게 하면 좋을까요?

| 질문-호텔 15
찡찡 2024-05-14 1748
updated 114518

렌트집의 HVAC 교체시기 + 포틀랜드 오레곤 근처에 믿을만한 HVAC 회사 추천 부탁드려요

| 질문-기타 4
moooo 2024-05-12 548
updated 114517

조기은퇴를 심각히 고민하고 있습니다

| 질문-은퇴 77
조기은퇴FIRE 2024-05-13 7293
updated 114516

멍청비용이라고 아시나요? ㅠㅠ

| 잡담 32
세계일주가즈야 2024-05-13 5678
updated 114515

IKEA 기프트카드 50불에 10불 보너스 딱 오늘만!

| 정보-기타 17
영원한노메드 2023-11-27 1812
updated 114514

아멕스 팝업 탈출 후기 입니다 (업데이트 : 저만 그런게 아닌 것 같습니다!!!)

| 후기-카드 114
캡틴샘 2024-05-04 8572
updated 114513

[2023RTW] 6. 태국 (Bangkok)

| 여행기 18
  • file
blu 2024-03-04 1601
updated 114512

딸의 졸업

| 잡담 87
  • file
달라스초이 2024-05-13 4655
updated 114511

[BA 마일로 AA 발권] MR 어디에 쓰지? 고민하신다면 보세요 (ft. DFW <-> EGE)

| 정보-카드 38
  • file
제이유 2023-12-27 3971