23-07-14 TIL

more·2023년 7월 14일
0

문제

  • XOR 연산
    • 학부생 때 배웠던 기억이 있는데 가물가물하기도 하고 자바로는 해본 적 없기도 하고... 다시 복습해보자

시도

  • XOR 연산
    • 배타적 논리합(exclusive OR)
    • 두 개의 피연산자 중 하나만이 1일 때 1을 반환
    • 즉 bit 단위로 연산을 해야 하는 경우인데, 2를 2진수로 바꾸면 10, 1을 2진수로 바꾸면 01이니까 2 XOR 1 => 10 XOR 01 => 11 이고 이를 다시 10진수로 바꾸면 3이되는 것

해결

  • XOR 연산
    • 자바에서는 이를 ^ 연산자를 사용해서 처리하고 있다.
    • 예를 들어 A XOR B => A ^ B 처럼 사용하는 것
    • 코드에서 보면 XOR을 계속 해주는데 C가 2의 배수인지에 따라서 원래 숫자인지 XOR 해준 결과값인지를 나눌 수 있다.
    • (A XOR B) XOR B = A 이기 때문에 C가 2의 배수라면 다시 원래 값으로 돌아오는 것
    • 따라서 홀수면 A XOR B -> A ^ B를 수행하면 되고, 짝수면 A를 리턴하면 된다.
    • 근데 ^가 제곱 연산자 인줄로 계속 생각했었음.... 2^3이면 8 이런 식으로...

오늘 푼 문제

  • 백준 12833 (XORXORXOR) - Java

    • 단순하게 XOR 연산에 대해서 이해하고 해당 연산자가 "^" 인것을 기억하면 되는 문제이다.
    import java.io.*;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
            int C = Integer.parseInt(st.nextToken());
    
            int res = 0;
    
            if(C % 2 == 1) res = A ^ B;
            else res = A;
    
            bw.write(res + "\n");
    
            bw.flush();
            bw.close();
            br.close();
        }
    }
    
  • 백준 28135 (Since 1973) - Java

    • 중요한 부분은 N을 String으로 받고 그 크기에 해당하는 배열을 만드는 것
    • 그 배열에 50이 포함되어 있는지 contains를 사용해서 확인하는 것
    • 해당 숫자에 50이 포함되어 있다면 -1 해주는 것
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            String N = br.readLine();
    
            ArrayList<String> number = new ArrayList<>();
    
            for (int i = 0; i <= Integer.parseInt(N); i++)  number.add(String.valueOf(i));
    
            int res = 0;
    
            for (int i = 1; i <= Integer.parseInt(N); i++) {
                res++;
                if (number.get(i).contains("50"))   res++;
            }
    
            if (number.get(Integer.parseInt(N)).contains("50"))   res--;
      bw.write(res + "\n");

      bw.flush();
      bw.close();
      br.close();
  }
}

0개의 댓글