반응형
Given two binary strings a and b, return their sum as a binary string.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
Constraints:
- 1 <= a.length, b.length <= 10^4
- a and b consist only of '0' or '1' characters.
- Each string does not contain leading zeros except for the zero itself.
class Solution:
def addBinary(self, a: str, b: str) -> str:
answer = ''
# 자릿수 맞추기
if len(a) != len(b):
if len(a) > len(b):
for _ in range(len(a) - len(b)):
b = '0' + b
else:
for _ in range(len(b) - len(a)):
a = '0' + a
std_len = max(len(a), len(b))
# 맨 뒤의 원소를 먼저 비교해서 높임 여부 확인
if a[-1] == '1' and b[-1] == '1':
carry = True
answer = '0' + answer
else:
carry = False
if a[-1] == '0' and b[-1] == '0':
answer = '0' + answer
else: # 둘 중 하나만 1인 경우
answer = '1' + answer
for i in range(std_len - 2, -1, -1): # 뒤에서 2번째 원소부터 진행
if a[i] == '1' or b[i] == '1':
if a[i] == '1' and b[i] == '1':
if carry == True:
answer = '1' + answer
else:
answer = '0' + answer
carry = True # 항상 True가 되어야 함
else: # 둘 중 하나만 1일 경우
if carry == True:
answer = '0' + answer
else:
answer = '1' + answer
else: # 둘 다 0일 경우
if carry == True:
answer = '1' + answer
else:
answer = '0' + answer
carry = False # 항상 False가 되어야 함
# 자릿수 넘어가는 경우 확인
if carry == True:
answer = '1' + answer
return answer
문제 자체는 굉장히 간단하다. 이진수끼리 연산을 해서 나온 결과값을 이진수로 리턴하면 된다.
파이썬의 내장 함수를 사용하면 바로 해결될 문제지만, 함수에 의존하지 않고자 직접 논리를 구현하기로 했다. 위의 코드를 보면 단계별로 차근차근 구현해 나간 것을 알 수 있다.
1) 자릿수를 맞추고(짧은 변수에 0을 앞에서부터 추가),
2) 마지막 원소를 먼저 확인해서 높임 여부 확인,
3) 연산 논리 구현
아래는 파이썬 내장 함수인 int(), bin()을 사용한 케이스다. 사실 5줄이면 끝나는 문제지만 처음부터 구현하면 위의 코드처럼 길어짐을 알 수 있다..
# 파이썬 내장 함수 사용
class Solution:
def addBinary(self, a: str, b: str) -> str:
a = int(a, 2) # 10진수로 변환
b = int(b, 2)
a = a + b
del b
return bin(a)[2:] # 2진수로 변환('0b'가 앞에 무조건 붙음)
728x90
반응형
'문돌이 존버 > 프로그래밍 스터디' 카테고리의 다른 글
(leetcode 문제 풀이) Balanced Binary Tree (0) | 2021.10.01 |
---|---|
(leetcode 문제 풀이) Longest Common Prefix (0) | 2021.09.30 |
(leetcode 문제 풀이) Remove Element (0) | 2021.09.23 |
(프로그래머스 연습 문제 풀이) 입실 퇴실 (0) | 2021.09.22 |
(leetcode 문제 풀이) Remove Duplicates from Sorted Array (0) | 2021.09.19 |