목차
문제 설명
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
class Solution {
public String solution(String bin1, String bin2) {
StringBuilder result = new StringBuilder(); // 결과를 저장할 StringBuilder 객체를 초기화
int carry = 0; // 이진수 덧셈에서 발생할 수 있는 올림수를 저장하기 위한 변수
// 두 문자열의 끝에서부터 시작하여 올림수가 존재하거나 두 문자열의 자리수가 남아있는 동안 반복
for (int i = bin1.length() - 1, j = bin2.length() - 1; i >= 0 || j >= 0 || carry > 0; i--, j--) {
// 문자열 a에서 현재 자리의 비트를 가져오고, 인덱스가 음수이면 0으로 간주
int bitA = (i >= 0) ? bin1.charAt(i) - '0' : 0;
// 문자열 b에서 현재 자리의 비트를 가져오고, 인덱스가 음수이면 0으로 간주
int bitB = (j >= 0) ? bin2.charAt(j) - '0' : 0;
// 현재 자리 비트와 올림수를 더하여 합을 계산
int sum = bitA + bitB + carry;
result.append(sum % 2); // 합의 나머지를 결과에 추가 (0 또는 1)
carry = sum / 2; // 합이 2 이상이면 올림수를 설정
}
return result.reverse().toString(); // 결과 문자열을 뒤집어서 반환
}
}
코드 설명
- 입력받은 이진수 처리:
- 입력값 a와 b는 이진수 문자열이다.
- 뒤에서부터 차례로 계산하기 위해 각각의 마지막 인덱스에서 시작한다.
- 이진수 합 계산:
- 각 자리의 숫자를 더하고, 더한 값의 나머지(sum % 2)를 결과에 추가한다.
- 올림수(carry)는 sum / 2를 사용해 계산한다.
- 남은 자리와 올림 처리:
- 두 이진수가 끝난 후에도 carry가 존재하면 추가로 처리한다.
- 결과 반환:
- StringBuilder의 reverse()를 사용하여 최종 결과를 반환한다.
728x90
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 공 던지기 (0) | 2024.12.11 |
---|---|
[프로그래머스, LV.0] 잘라서 배열로 저장하기 (0) | 2024.12.11 |
[프로그래머스, LV.0] 소인수분해 (0) | 2024.12.11 |
[프로그래머스, LV.0] 컨트롤 제트 (0) | 2024.12.11 |
[프로그래머스, LV.0] k의 개수 (0) | 2024.12.11 |