728x90
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
void strrev(char* s) {
size_t size = strlen(s);
char temp;
for (size_t i = 0; i < size / 2; i++) {
temp = s[i];
s[i] = s[(size - 1) - i];
s[(size - 1) - i] = temp;
}
}
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* bin1, const char* bin2) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(sizeof(char)*11);
char* str1 = (char*)malloc(sizeof(char)*11);
char* str2 = (char*)malloc(sizeof(char)*11);
int carry = 0;
int i;
if(strlen(bin1)>strlen(bin2)) {strcpy(str1, bin1); strcpy(str2, bin2);}
else {strcpy(str1, bin2); strcpy(str2, bin1);}
strrev(str1);
strrev(str2);
int str1_len = strlen(str1);
int str2_len = strlen(str2);
for(i=0;i<str2_len;i++){
if(carry == 0){
if(str1[i]=='0'&&str2[i]=='0') answer[i] = '0';
else if(str1[i]=='1'&&str2[i]=='1') {answer[i] = '0'; carry = 1;}
else answer[i]='1';
}
else{
if(str1[i]=='0'&&str2[i]=='0') {answer[i] = '1'; carry=0;}
else if(str1[i]=='1'&&str2[i]=='1') {answer[i] = '1'; carry = 1;}
else {answer[i]='0'; carry=1;}
}
}
for(i=str2_len;i<str1_len;i++){
if(carry == 0){
if(str1[i]=='0') answer[i] = '0';
else answer[i] = '1';
}
else{
if(str1[i]=='0') answer[i] = '1';
else {answer[i] = '0'; carry = 1;}
}
}
if(carry==1) {answer[str1_len] = '1'; answer[str1_len+1] = '\0';}
else {answer[str1_len] = '\0';}
strrev(answer);
return answer;
}
'알고리즘 > 코딩 테스트 문제' 카테고리의 다른 글
[프로그래머스] 문자열 계산하기(C) (0) | 2023.09.21 |
---|---|
[프로그래머스] 영어가 싫어요(C) (0) | 2023.09.21 |
[프로그래머스] 잘라서 배열로 저장하기(C) (0) | 2023.09.21 |
[프로그래머스] 모스 부호(1)(C) - strtok() (0) | 2023.09.21 |
[프로그래머스] 특정 문자 제거하기(C) (0) | 2023.09.21 |