백준 BaekJoon 1252번: 이진수 덧셈[Java] 자바

2020-10-10


문제

두 개의 이진수를 입력받아 이를 더하는 프로그램을 작성하시오.

입력

첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다.

각 이진수는 1 또는 0으로만 이루어져 있으며, 0으로 시작할 수도 있다.

또한 각 이진수의 길이는 80을 넘지 않는다.

출력

첫째 줄에 이진수 덧셈 결과를 출력한다.

결과가 0인 경우를 제외하고는 출력되는 이진수는 항상 1로 시작해야 한다.

 


		Scanner scan = new Scanner(System.in);
		String N = scan.next();
		String M = scan.next();
		
		int [] sum = new int [80];
		
		int max = N.length() >= M.length() ? N.length() : M.length();
		//몇번째 까지 입력되었는지 체크할 변수
		
		int C = 0;
		//자리올림 체크 변수
		
		int [] arrN = new int [max];
		int [] arrM = new int [max];
		
		int count = 0;
		//배열위치 지정함수
		for(int i = N.length()- 1; i >= 0 ; i--) {
			arrN[count] = N.charAt(i) - '0';	
			count++;
		}	
		//이진법은 뒤에서 부터 계산하기 때문에 뒤부터 배열에 넣어줌
		
		count = 0;
		for(int i = M.length()- 1; i >= 0 ; i--) {
			arrM[count] = M.charAt(i) - '0';
			count++;
		}
		
		
		for(int i = 0; i < max; i++) {
			sum[i] = arrN[i] + arrM[i] + C;
			if(sum[i] >= 2) {
				sum[i] -=2;
				C = 1;
			}else {
				C = 0;
			}
		}
		
		
		if(C == 1) {
			//첫쨰 자리에 자리올림이 있었는지
			//마지막으로 체크
			sum[max] = 1;
			for(int i = max; i >=0; i--) {
				System.out.print(sum[i]);
			}	
		}else {
			for(int i = max-1; i >=0; i--) {
				System.out.print(sum[i]);
			}
			
		}

 

출처 링크 : www.acmicpc.net/problem/1252

 

1252번: 이진수 덧셈

첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다. 각 이진수는 1 또는 0으로만 이루어져 있으며, 0으로 시작할 수도 있다. 또한 각 이진수의 길이는 80을 넘지 않는다.

www.acmicpc.net