프로그래머스 Lv1 문제입니다. 실전에 대비하기 위해 30분 시간제한을 두고 풀었습니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
[나의 풀이]
⌛ 시간 초과 (후 구현)
import re
from collections import deque
def get_format(bin_str,n):
bin_str = deque(bin_str)
while len(bin_str)!=n:
bin_str.appendleft("0")
return "".join(bin_str)
def solution(n, arr1, arr2):
answer = []
for i in range(n):
x = deque(bin(arr1[i]|arr2[i])[2:])
while len(x) != n:
x.appendleft("0")
x = "".join(x)
x = re.sub('1','#',x)
x = re.sub('0',' ',x)
answer.append(x)
return answer
문제 정의와 구현 방법은 생각이 났지만 조금 더 간결한 코드로 구현하기 위해 고민하다 시간을 초과한 문제였습니다. 입력된 숫자값을 bin()로 변환하고 비트연산하여 두 개의 지도 겹치는 부분을 구현하고 반환 형식에 맞게 문자열 크기를 고정시킨 풀이입니다.🐰🐰🐰
조금 더 간결한 풀이가 없을까 하여 다른 사람의 풀이를 찾아보았습니다.
[다른 사람의 풀이1]
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
a12 = str(bin(i|j)[2:])
a12=a12.rjust(n,'0')
a12=a12.replace('1','#')
a12=a12.replace('0',' ')
answer.append(a12)
return answer
지도를 겹치는 과정에서 비트연산하는 과정을 동일하게 들어가지만 문자열 크기를 고정하는 방식이달랐습니다. 간단히 rjust()라는 함수로 처리한 모습입니다.
예를 들어
text = "안녕하세요"
width = 10
result = text.rjust(width,' ')
print(result)
일때 ' 안녕하세요'와 같이 문자열 크기를 고정되어 '나의 풀이'get_format(bin_str,n)보다 간단한 표현 방식이었습니다.
[다른 사람의 풀이2]
import re
def solution(n, arr1, arr2):
answer = ["#"]*n
for i in range(0, n):
answer[i] = str(bin(arr1[i]|arr2[i]))[2:]
answer[i] = re.sub('1', '#', '0'*(n-len(answer[i]))+answer[i])
answer[i] = re.sub('0', ' ', answer[i])
return answer
rjust() 함수를 사용하지 않고 정규식으로 표현한 간단한 풀이입니다. 고정된 길이보다 부족한 만 큼 '0'을 추가하는 방식으로 '나의 풀이'에서 구현하고 싶어 오래 고민했던 방식입니다.🐳🐳🐳
감사합니다.