import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList arr = new ArrayList();
int result = 0;
for (int i = 0; i < n; i++) {
int A = Integer.parseInt(br.readLine());
arr.add(A);
}
// 각 입력값을 ArrayList에 저장함
for (int i = 0; i < arr.size(); i++) {
for (int j = i + 1; j < arr.size(); j++) {
result += Integer.parseInt(String.valueOf(arr.get(i))) ^ Integer.parseInt(String.valueOf(arr.get(j)));
}
}
// for문을 2번 돌면서 2진법 XOR연산자로 비교해주고 result에 해당 값을 더해준다.
System.out.println(result);
}
}
<br><br>
👍 내생각
2진법 관련된 문제를 풀어본 적이 없어서 감이 안잡혔다
요 문제 풀 때 가장 헤맨 부분은
① 10진법 숫자를 어떻게 2진법으로 나눠줘야 하나 고민했다 toBinary 명령어에 대해서 무지했다.
② XOR 연산자 (^)를 쓰기 위해서는 10진법 숫자를 2진법으로 바꿔줘야 되는 줄 알았다.
이 과정에서 int, Integer, String 사이에서 형변환 해주느냐고 아주 진땀을 뺐다
③ 예제 문제까지는 다 원하는 값이 출력되는 코드를 짰지만 시간초과가 생겼다.
<br><br>
🤔배운내용
1. 시간초과 ( 시간복잡도는 코드의 생명이란다 ) 난 아직 이거까지는 모르겠고,, 다른 방법은 더 생각해봐야겠다
2. 10진법 -> 2진법 은 toBinary 명령어 사용
3. 2진법 -> 10진법 은 Integer.parseInt(숫자, 2진법)
4. bufferedReader 사용법