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

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

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

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

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

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

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

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

| 정보 180
ReitnorF 2020-06-25 198110
updated 115099

이전에 보스의 보스에게 인종차별과 불리 리포트했다고 했던 업데이트 입니다.

| 잡담 22
하성아빠 2024-06-07 3141
new 115098

Frontier Airline Baggage Charge

| 정보-항공 3
snowman 2024-06-07 341
updated 115097

Marriott Bonvoy --> 대한항공 전환 종료 (6월 17일부)

| 정보-항공 42
스티븐스 2024-06-03 6105
updated 115096

장애를 가진 자녀를 위한 준비 - 어떤 방식이 더 적합할까요?

| 질문-은퇴 9
  • file
Jester 2024-06-07 1866
updated 115095

고등학생 해외 여행시 핸드폰과 DATA 어떻게 하시나요?

| 질문-기타 9
ALMI 2024-06-07 561
new 115094

울타리 보수시 이웃집과 경비부담

| 질문-기타 6
  • file
doomoo 2024-06-07 722
updated 115093

Amex Hilton 카드 NLL 오퍼 (일반, Surpass)

| 정보-카드 577
UR_Chaser 2023-08-31 63269
updated 115092

[6/7/24] 발느린 늬우스 - 바빠요 바빠. 그래도 발늬는 올라갑니다 'ㅁ')/

| 정보 40
shilph 2024-06-07 1948
new 115091

휠 오브 포츈의 펫 세이젝이 41시즌만에 은퇴하시는 군요..

| 잡담 1
  • file
heesohn 2024-06-08 189
updated 115090

4 인가족 첫 하와이 여행 후기 - 2024년 3월 (Hilton Hawaiian Village Waikiki Beach Resort) 2편

| 여행기-하와이 6
나는보물 2024-04-04 995
updated 115089

언제 사프 다운그레이드하는 게 좋을까요?

| 질문-카드 21
꼬북칩사냥꾼 2024-06-06 1992
updated 115088

[맥블 출사展 - 90] 캐나다 안의 프랑스 - 퀘벡 시티

| 여행기 32
  • file
맥주는블루문 2024-06-03 2030
new 115087

엘에이 인근 메리엇 85k 숙박권 사용할 최고의 호텔은 어디일까요?

| 질문-호텔 5
또골또골 2024-06-07 733
updated 115086

나트랑 나짱 베트남 인터콘티넨탈

| 정보-호텔 6
  • file
지지복숭아 2024-05-31 1773
updated 115085

6개월간 달렸던 뱅보 후기

| 후기 37
Necro 2024-06-05 3570
updated 115084

[5/28/24] 발전하는 초보자를 위한 조언 - 카드를 열기 위한 전략

| 정보 18
shilph 2024-05-28 1431
updated 115083

콘래드서울 4천억에 매각

| 잡담 5
자몽 2024-06-06 3533
updated 115082

[사진으로만 보는] Mt. Rushmore, Badlands NP, Theodore Roosevelt NP

| 정보-여행 11
  • file
개골개골 2024-06-01 1096
updated 115081

3월 마우이 & 오아후 - 힐튼 Ka La'i Waikiki Beach, LXR Hotels & Resorts 리뷰 (스압 주의)

| 여행기-하와이 6
  • file
삼대오백 2024-03-25 1414
updated 115080

효과적인 차콜 그릴 그레이트 청소도구 소개합니다.

| 정보-기타 26
ddolddoliya 2024-05-22 2574
updated 115079

EB2 (대학교 교직원) I485 준비 서류 리스트 공유

| 정보-기타 8
기린기린 2024-06-06 801
updated 115078

JAL 항공으로 미국행의 경우 미들네임..

| 질문-항공 26
Bella 2024-05-31 1511
new 115077

UR 포인트 파트너에게 트랜스퍼하는게 안되네요

| 정보 1
네모냥 2024-06-08 369
new 115076

옐로우 스톤 여행을 위한 카드 추천 도움 부탁드려요!

| 질문-카드 2
Soandyu 2024-06-07 261
updated 115075

5인 가족의 마우이 여행 후기 입니다- 2편

| 여행기-하와이 13
  • file
마모신입 2021-04-12 4902
updated 115074

코스코 마사지 체어 구입 직전 입니다. 조언 부탁드려요.

| 질문-기타 7
아버지는말하셨지인생을즐겨라 2024-06-07 1082
updated 115073

[개악?] 케1 벤처 X 매년 나오는 300 불 여행 관련 statement credit -> 300 불 쿠폰으로 변경

| 정보-카드 68
레딧처닝 2023-09-13 7930
updated 115072

[부동산] MF (Multi House) 투자의 출발점- 매물 찾기와 집사기 프로세스

| 정보-DIY 76
사과 2022-01-03 9219
updated 115071

Rio & Conrad Las Vegas 간단후기 (May 2024)

| 후기 8
  • file
kaidou 2024-06-07 746
updated 115070

Google nest Thermostat 교체 후 A/C 작동이 안됩니다

| 질문-DIY 16
  • file
모찌건두부 2024-06-06 1001