본문 바로가기
코테

백준 1252번-이진수 덧셈

by arirang_ 2023. 8. 7.

https://www.acmicpc.net/problem/1252

 

1252번: 이진수 덧셈

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

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
string str1, str2;
int binary1[81]={0}, binary2[81]={0}, sum[81]={0};

int main(){
	cin >> str1 >> str2;
	for(int i=0; i<str1.size(); i++){
		binary1[80-i] = str1[str1.size()-1-i] -'0';	
	}
		
	for(int i=0; i<str2.size(); i++){
		binary2[80-i] = str2[str2.size()-1-i]-'0';
	}
	
	for(int i=80; i>=0; i--){
		sum[i] = binary1[i] + binary2[i];
		
		
		if(sum[i] >=2){
			sum[i]= sum[i]-2;
			binary1[i-1]++;
		}
	}
	
	int startIdx=0;
	while(sum[startIdx]==0 && startIdx<80) startIdx++;
	for(int i=startIdx; i<=80; i++){
		cout << sum[i];
	}

	return 0;
}

 

 

1. 2개의 이진수를 string로 입력 받는다. 

(string으로 받으면 길이 세기가 편하기 때문이다.)

 

2. str1과 str2 각각 char형 배열 binary1, binary2 뒤에서 부터 넣는다. 

(binary1과 binary2가 int형이므로 str1의 원소도 int형으로 변형해서 넣는다.)

for(int i=0; i<str1.size(); i++){
	binary1[80-i] = str1[str1.size()-1-i] -'0';	
}
		
for(int i=0; i<str2.size(); i++){
	binary2[80-i] = str2[str2.size()-1-i]-'0';
}

 

3. 이진수의 덧셈을 진행한다. 

for(int i=80; i>=0; i--){
	sum[i] = binary1[i] + binary2[i];
			
	if(sum[i] >=2){
		sum[i]= sum[i]-2;
		binary1[i-1]++;
	}
}

- 여기서 if문에서 sum이 2일 때만 고려해서 틀렸었다. 3이 나올 수 도 있으므로 이를 고려해야한다. 

 

4. 시작 인덱스의 값이 1일 때부터 값을 출력한다. 

int startIdx=0;
while(sum[startIdx]==0 && startIdx<80) startIdx++;
for(int i=startIdx; i<=80; i++){
	cout << sum[i];
}

'코테' 카테고리의 다른 글

백준 1259번 - 팰린드롬수  (0) 2023.08.07
백준 10808번 - 알파벳 개수  (0) 2023.08.07
백준 1236번-성 지키기  (0) 2023.08.06
백준 1233번 -주사위  (0) 2023.08.06
백준 1225번- 이상한 곱셈  (0) 2023.08.04