-
[백준/BOJ] 1252번 : 이진수 덧셈 (JAVA / 자바)백준 2022. 2. 15. 19:28
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1252
- 문제 -
난이도 브론즈 2 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
입력된 2진수를 10진수로 바꾼다. 바꾼 값을 더한다. 더한 값을 2진수로 바꾼다. 심플하지만 어떤 함수를 적용할지 정수형은 어떤걸 써야할지 잘 파악해야한다. 진수 변화를 하기 위해선 우선 정수형을 파악하자.
2진수는 80자리까지 가능하다고 한다. 그렇단건 10진수로 바꾸면 2의 80제곱이 넘어선다는 것이다. 그렇다면 long형인 2읜 63제곱을 넘어선다. 그렇기에 BigInteger를 사용하자.
BIgInteger에서 10진수로 바꾸는 방법은 문자열을 BigInteger로 형변환 할때 int형이나 long형처럼 2를 같이 넣어주면 된다. 코드로보면 쉽게 알 수 있다.
그렇게 바꾼 값들을 add로 더해주고, 2진수로 바꿔준다. 방식은 BIgInteger를 String으로 형변환 하면서 2를 넣어주는 것이다. 형변환 방법은 변수.toString()이고, 2진수로 바꾸려면 괄호안에 2를 넣어주면된다.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); String A = st.nextToken(); String B = st.nextToken(); //BigInteger 형변환 하면서 10진수로 바꿔준다.(A, 2)가 10진수로 바꾸는 방법 BigInteger A_binary = new BigInteger(A, 2); BigInteger B_binary = new BigInteger(B, 2); //합 연산식(add)로 더해서 변수에 저장. BigInteger sum = A_binary.add(B_binary); //풀이방식에 적어둔 대로 2진수로 변환 String sum_binary = sum.toString(2); System.out.println(sum_binary); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1296번 : 팀 이름 정하기 (JAVA / 자바) (0) 2022.02.16 [백준/BOJ] 1259번 : 팬린드롬수 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1233번 : 주사위 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1225번 : 이상한 곱셈 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 10952번 : A+B - 5 (JAVA / 자바) (0) 2022.02.15