BackJoon_2830

위서연·2023년 4월 17일

BackJoon

목록 보기
4/5

백준 2830 문제

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 사용법

0개의 댓글