나의 답안
def solution(n, arr1, arr2):
answer = ['' for i in range(n)]
for i in range(len(arr1)):
temp =bin(arr1[i])[2:]
if len(temp) != n:
while len(temp) != n:
temp = '0'+temp
arr1[i] = temp
arr1[i] = temp
for i in range(len(arr2)):
temp =bin(arr2[i])[2:]
if len(temp) != n:
while len(temp) != n:
temp = '0'+temp
arr2[i] = temp
arr2[i] = temp
for i in range(n):
for j in range(n):
if (arr1[i][j] == '1') or (arr2[i][j] == '1'):
answer[i]+='#'
else:
answer[i]+=" "
return answer
최고 답안
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
느낀점:
문제자체는 어렵지 않았다. 리스트의 숫자를 이진수(binary)로 바꾸고 자릿수에 맞게 0을 추가해준다.
그다음 arr1, arr2의 원소를 비교해주어 1 또는 0을 반환하게 하였다. 이 과정 까지 문제는 그렇게 어렵지 않았으나, 최고 답안을 보고 많은 생각이 들었다.
나는 최고답안이 쓴 zip을 몰라 동일한 코드를 2번 적었고, bin 함수에 비트연산자를 쓰면 한번에 두 개의 비교연산을 한 결과값을 이진수로 출력할수 있다는 것을 몰라 무수한 반복문을 사용했다. 또한 rjust함수를 몰라 rjust를 만들어 사용했다. 이번 문제를 풀고 내장 함수에 대한 지식이 있으면 코드를 깔끔하고 간결하게 쓸수 있고 함수를 만들어내지 않고 빠르게 사용할수 있다는 것을 알게 되었다.
참고 사이트
zip
bin 및 비트연산자
rjust, ljuist, zfill
AND, OR, NAND, NOR, XOR, XNOR