백준/Java

[백준 자바] 11179번(2진수 뒤집기)

gamzaggang7 2024. 6. 19. 21:29
728x90

난이도 - 브론즈 1

문제

희연이는 스웨덴으로 이사하여 현재 학교를 다니고 있다. 1학년 교육과정은 중국에서 배웠고, 스웨덴과 중국 두 나라의 교육과정은 완전히 다르다. 희연이는 수학을 좋아한다. 하지만 지금은... 선생님은 칠판에 뺄셈을 설명하고 있어서 희연이는 수업에 흥미가 없다. 칠판에 있는 수들을 역 이진법으로 나타낸 수들로 같은 계산을 수행하는 것이 가능할까? 희연이는 몽상을 하며 시간을 보냈고, 머릿속으로 역 이진법 표시 프로그램을 구상하기 시작했다. 수업이 끝나는대로 희연이는 집에가서 컴퓨터에 그것들을 적을 것이다.

당신이 할 일은 역 이진법 프로그램을 작성하는 것이다. 예를 들어 13을 2진법으로 나타내면 1101이고, 이것을 뒤집으면 1011이 된다. 이 수를 다시 10진법으로 나타내면 11이다.

입력

입력은 한 줄에 정수 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력받은 N을 2진법으로 나타낸 뒤 뒤집어, 다시 10진법으로 나타낸 수를 출력한다.

 

 


 

728x90
import java.io.*;

public class Main11179 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int N = Integer.parseInt(br.readLine());

    bw.write(String.valueOf(binaryToDecimal(toBinary(N))));

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

  static String toBinary(int n) {
    StringBuffer result = new StringBuffer();

    do {
      result.append(n % 2);
      n /= 2;
    } while (n > 0);

    return result.reverse().toString();
  }

  static int binaryToDecimal(String binary) {
    int result = 0;

    for (int i = 0; i < binary.length(); i++) {
      result += (binary.charAt(i) - '0') * Math.pow(2, i);
    }

    return result;
  }
}

728x90