본문 바로가기
프로그래머스코딩테스트연습풀이/C언어

[프로그래머스/C언어] 이진수 더하기

by 코코쵸마 2023. 8. 30.

문제

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

 

솔루션

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* bin1, const char* bin2) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int max = 0;
    if(strlen(bin1) > strlen(bin2))
        max = strlen(bin1);
    else
        max = strlen(bin2);
    char* answer = (char*)malloc(max+1);
    char* answer_ivs = (char*)malloc(max+1);
    int num;
    int index1 = strlen(bin1) - 1;
    int index2 = strlen(bin2) - 1;
    int n = 0;
    int tmp = 0;
    int num1 = bin1[index1] - 48;
    int num2 = bin2[index2] - 48;
    
    while(1){
        if(tmp + num1 + num2 < 2)
        {
            num = tmp + num1 + num2;
            tmp = 0;
        }
        else
        {
            num = tmp + num1 + num2 - 2;
            tmp = 1;
        }
        answer_ivs[n++] = num + 48;
        if(index1 == 0 && index2 == 0 && tmp == 0) break;
        if(index1 > 0)
            num1 = bin1[--index1] - 48;
        else
            num1 = 0;
        if(index2 > 0)
            num2 = bin2[--index2] - 48;
        else
            num2 = 0;
    }
    for(int i = 0; i < n; i++)
        answer[i] = answer_ivs[n - i - 1];
    answer[n] = '\0';
    return answer;
}

https://school.programmers.co.kr/learn/courses/30/lessons/120885#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr