ref: https://programmers.co.kr/learn/courses/30/lessons/72410
한 변의 길이가 n인 정사각형 배열 형태
각 칸은 "공백"(" ") 또는 "벽"("#")
지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽
모두 공백인 부분은 전체 지도에서도 공백
1 ≦ n ≦ 16
2진수 변환 내장함수, 2차원 리스트, 집합 연산?
리스트가 최대 16**2이기 때문에 시간복잡도 걱정할 필요가 없다.
def solution(n, arr1, arr2):
graph1 = []
for i in arr1:
binary_value = bin(i)[2:].rjust(n,'0')
graph1.append(list(binary_value))
graph2 = []
for i in arr2:
binary_value = bin(i)[2:].rjust(n,'0')
graph2.append(list(binary_value))
for i in range(n):
for j in range(n):
graph1[i][j] = int(graph1[i][j]) + int(graph2[i][j])
answer = []
for i in graph1:
tmp = ''
for j in i:
if j == 0:
tmp += ' '
else:
tmp += '#'
answer.append(tmp)
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
zip으로 감싸는 것.
충분히 알고 있었는데 생각해내지 못했다.
replace는 수행시간이 오래 걸릴 가능성이 있어서 최대한 안쓰려고 한다.
그러나 이번 문제는 n이 최대 16이니까 시간 걱정할 일이 없다.
function solution(n, arr1, arr2) {
const answer = [];
for(let i=0; i<n; i++){
const tmpArray1 = arr1[i].toString(2).padStart(n,'0').split('');
const tmpArray2 = arr2[i].toString(2).padStart(n,'0').split('');
let mergedString = '';
for(let j=0; j<n; j++){
const mergedValue = parseInt(tmpArray1[j]) + parseInt(tmpArray2[j]);
if (mergedValue === 0){
mergedString += ' ';
} else{
mergedString += '#';
}
}
answer.push(mergedString);
}
return answer;
}