[프로그래머스] 이진수 더하기

이강혁·2023년 9월 20일
0

프로그래머스

목록 보기
14/82

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

문제 설명

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

제한 사항

  • return 값은 이진수를 의미하는 문자열입니다.
  • 1 ≤ bin1, bin2의 길이 ≤ 10
  • bin1과 bin2는 0과 1로만 이루어져 있습니다.
  • bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

입출력 예

bin1	bin2	result
"10"	"11"	"101"
"1001"	"1111"	"11000"

입출력 예 설명

  • 입출력 예 #1
    10 + 11 = 101 이므로 "101" 을 return합니다.

  • 입출력 예 #2
    1001 + 1111 = 11000 이므로 "11000"을 return합니다.

코드

function solution(bin1, bin2) {
	var answer = '';

	[bin1, bin2] = [bin1.length<bin2.length?bin1.split('').map(x=>parseInt(x)):bin2.split('').map(x=>parseInt(x))
    			   ,bin1.length>=bin2.length?bin1.split('').map(x=>parseInt(x)):bin2.split('').map(x=>parseInt(x))]
                
    for(let i=bin1.length-1;i>=0;i--){
	    if(bin1[i]){
    	    bin2[i+bin2.length-bin1.length] +=bin1[i];
        	console.log(i, bin2)
        	for(let j = bin2.length-1;j>=0;j--){
            	if(j!=0&&bin2[j]==2){
                	bin2[j-1]+=1;
                	bin2[j] = 0;
            	}
            	else if(j==0&&bin2[j]==2){
                    bin2.unshift(1);
	                bin2[1] = 0;
    	        }
        	}
        }
	}

	return bin2.join('');
}

자리수가 큰 수에다가 자리수가 작은 수를 더하기.
맨 뒷자리부터 1일 경우에 더해가면서 2가 나오면 앞 자리에 1을 더하고 해당 자리는 0
맨 앞자리에 2인 경우에 unshift(1)로 맨 앞에 1추가하고 원래 2가 있는 자리는 0

다른 풀이

function solution(bin1, bin2) {
	return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2)
}

parseInt의 두 번째 매개변수는 몇 진수로 표현할 지 입력하는 곳,
2진수 정수로 바꿔서 더해버리기

profile
사용자불량

0개의 댓글