이중 반복문으로 풀면 쉬울 줄 알았는데..
시간초과..
검색해서 아이디어를 훔쳐왔다
주요 아이디어는 각 자리수마다 위 빨간 글자로 xor연산 결과를 만들어서 합치는 것.. 대단하다..
추가로 주어지는 N의 최대값이 1,000,000이니까 2진법으로는 2^20보다 작기때문에 각 자리수의 연산을 20회로 줄이는 것 등등 아래는 최종코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baekjoon2830 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int binaryMax = 20; // 주어지는 수 는 2^20 보다 작다
int[] resultOne = new int[binaryMax];
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(br.readLine());
for (int j = 0; j < resultOne.length; j++) {
if ((num & (1 << j)) > 0) {
resultOne[j]++;
}
}
}
long answer = 0l;
for (int i = 0; i < resultOne.length; i++) {
answer += (1l << i) * resultOne[i] * (n - resultOne[i]);
}
System.out.println(answer);
}
}
정보 감사합니다.