Today
-
Yesterday
-
Total
-
  • 행성 X3
    코딩테스트 문제 풀이/백준 2023. 11. 21. 00:01

    다른사람 풀이

    package baekjoon;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Main {
        public void main() throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
    
            int[] ones = new int[20];
            for (int i = 0; i < n; i++) {
                int name = Integer.parseInt(br.readLine());
                for (int j = 0; j < 20; j++) {
                    if ((name & (1 << j)) > 0) ones[j]++;
                }
            }
    
            long sum = 0L;
            for (int i = 0; i < 20 i++) {
                sum += (1L << i) * ones[i] * (n - ones[i]);
            }
            System.out.println(sum);
        }

    이 문제 공식처럼 외워서 풀어야 하는 문제인줄 알았는데 아니었다..!! 어느분이 해설 올려두신것 링크 첨부합니다 https://m.blog.naver.com/chogahui05/221258149120

    아래는 식에 대한 풀이 🔻

    F(a, b, c) = G(a, b, c)
    
    F(a, b, c) = a⨁b + a⨁c + b⨁c (여기서 ⨁는 XOR 연산)
    G(a, b, c) = (a b c의 0번째 자리수의 0의 개수 합 * a b c의 0번째 자리수의 1의 개수 합 * (1<<0))
    			+ (a b c의 1번째 자리수의 0의 개수 합 * a b c의 1번째 자리수의 1의 개수 합 * (1<<1)) 
    			+ (a b c의 2번째 자리수의 0의 개수 합 * a b c의 2번째 자리수의 1의 개수 합 * (1<<2))
    
    
    a = 7, b = 3, c = 5일 때, 
    
    a = 7 = 111 (2진수)
    b = 3 = 011 (2진수)
    c = 5 = 101 (2진수)
    
    이제 F(a, b, c)를 계산해 봅시다.
    F(a, b, c) = a⨁b + a⨁c + b⨁c = 7⨁3 + 7⨁5 + 3⨁5 = 4 + 2 + 6 = 12
    
    이제 G(a, b, c)를 계산해 봅시다.
    
    각 자리수별로 0과 1의 개수를 세어 보겠습니다.
    
    자리수	0의 개수		1의 개수
      0			0		   3
      1			1		   2
      2			1		   2
      
    G(a, b, c) = (0 * 3 * (1<<0)) + (1 * 2 * (1<<1)) + (1 * 2 * (1<<2)) 
    		   = 0 + 2 * 2 + 2 * 4 
               = 0 + 4 + 8 
               = 12
    
    따라서 F(a, b, c) = G(a, b, c) = 12 입니다.

    처음 풀어본 날 : 23.03.25 다시 풀어본 날 : 23.03.26 _ 03.30 _ 04.01

    '코딩테스트 문제 풀이 > 백준' 카테고리의 다른 글

    백준: 영수증  (0) 2023.11.22
    백준 : 빠른 A+B  (0) 2023.11.21
    백준 : 힙 정렬2  (0) 2023.11.21
    백준: 요세푸스 문제  (0) 2023.11.20
    백준: 최소, 최대  (0) 2023.11.20

Designed by Tistory / Custom by 얼거스