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 / 3811
Status 번호 제목 글쓴이 날짜 조회 수
  공지

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

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

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

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

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

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

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

| 정보 180
ReitnorF 2020-06-25 182668
updated 114317

IRA 은퇴 계좌에서 60일 이내의 비상금 꺼내 쓰기 | 피델리티로 집 클로징 후기

| 질문-기타 19
2n2y 2024-04-20 2812
new 114316

[DIY] LVP 설치 후기 Carpet and Dust Free Project!

| 정보-DIY 14
  • file
륌피니티 2024-05-03 678
new 114315

뉴욕 초당골 vs 북창동 순두부 추천해주세요!

| 질문-여행 22
오동잎 2024-05-03 979
new 114314

11K 스펜딩용 카드 추천해주세요

| 질문-카드 6
에덴의동쪽 2024-05-03 901
new 114313

전기차 딜이 점점 aggressive 해가고 있습니다.

| 잡담 11
Leflaive 2024-05-03 2671
new 114312

직장인에게 가성비 좋은 MBA가 있을까요?

| 질문-기타 2
돈쓰는선비 2024-05-03 518
new 114311

샘소나이트 지금이 구매 적기입니다! (최저가)

| 정보-기타 18
  • file
만쥬 2024-05-03 3438
new 114310

고양이 집사님들 캣푸드는 어떤걸 소비하시나요?

| 질문-기타 14
고양이알레르기 2024-05-03 412
new 114309

그리스 여행하다가 지갑 잃어버린 후기

| 후기 1
두유 2024-05-03 290
new 114308

GS 포지션으로 미국 밖 다른 나라로 나가서 일할때 가족중 미국 영주권자는 영주권이 어떻게 될까요

| 질문-기타 12
민트바라기 2024-05-03 941
updated 114307

[05/02/24 온라인도 시작] 체이스 사파이어 프리퍼드 75k (지점은 10K 추가) / 사파이어 리저브 75k Offer

| 정보-카드 124
Alcaraz 2024-04-25 10426
updated 114306

나리타공항 ANA, 다낭공항 라운지 사진

| 후기 6
  • file
낮은마음 2024-03-29 1054
new 114305

기아 자동차 보험 가격

| 질문-기타 5
BugBite 2024-05-03 465
updated 114304

인도인 동료가 좋아할만한 한국음식 뭐가 있을까요?

| 질문-기타 45
Strangers 2024-05-02 2001
updated 114303

라쿠텐 (Rakuten) 리퍼럴 (일시적) 40불 링크 모음

| 정보-기타 891
마일모아 2020-08-23 28423
updated 114302

힐튼 서패스 VS 어스파이어 어떤쪽 선호하세요?(1월중 선호도 조사 투표)

| 잡담 127
1stwizard 2024-01-11 14063
updated 114301

오피스에서 일하시는 분들 중 낮잠 주무시는 분 계신가요?

| 질문-기타 45
playoff 2024-05-02 3969
updated 114300

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

| 정보-카드 4173
24시간 2019-01-24 199494
updated 114299

2024 Amex Airline Credit DP

| 정보-카드 3421
바이올렛 2019-03-18 214451
new 114298

아멕스 캔슬된 어카운트 technical error 체크 발행

| 질문-카드 3
애기냥이 2024-05-03 294
updated 114297

인생 고민, 커리어 고민

| 잡담 73
여행비행소년 2019-02-09 5203
new 114296

집 판매 수익으로 새집 Mortgage 갚기 VS Cash Saving account 이자 받기, 뭐가 나을까요?

| 질문-기타 6
놀궁리 2024-05-03 873
new 114295

은퇴준비/은퇴후 를 위한 본드 뮤츄럴 펀드

| 질문-은퇴 4
Larry 2024-05-03 504
updated 114294

넷플릭스 삼체 (3 Body Problem) 보셨나요? (스포 x)

| 후기 16
이론머스크 2024-03-25 4644
updated 114293

본인의 운을 Hyatt와 확인해보세요 (Hyatt Q2 '24 Offer) [YMMV a lot]

| 정보-호텔 29
이성의목소리 2024-05-02 3849
updated 114292

우여곡절끝에 모델 Y 오더했다 모델 3 하이랜드로 다시 재오더했습니다.

| 후기 13
쟈슈아 2024-02-29 2940
updated 114291

사파이어 프리퍼드에서 리저브로 업그레이드 가능한가요?

| 질문-카드 22
렝렝 2018-03-06 3666
updated 114290

소소한 태블릿 꿀?딜... 갤럭시 탭 a9+ 5g

| 정보-기타 3
resoluteprodo 2024-05-03 952
updated 114289

버진 마일로 산 델타 Schedule Change쉽나요?

| 질문-항공 6
ParisLove 2024-05-03 562
updated 114288

(타겟) Hyatt (하얏트) Double Night Credits Promo (up to 10 nights)

| 정보-호텔 25
Globalist 2024-04-25 2275