⚠️ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
🔐 풀이
이 문제는 비트 연산을 통해 해결할 수 있습니다.
두 지도를 겹쳐 지도 1, 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이기 때문에,
각 지도의 같은 행끼리 비트 or 연산을 하면 전체 지도의 벽 위치를 알 수 있습니다.
우선 각 행을 비트 or 연산한 결과를 bin() 함수를 이용해 2진수로 변환하고 [2:]를 통해 맨 앞 진법 표시를 지워줍니다.
이때 2진수의 길이가 n보다 짧아졌다면, 2진수 맨 앞의 0들이 생략된 것이므로 다시 생략된 0을 추가해줍니다.
이후 replace() 함수를 이용해 1을 #(벽)으로, 0을 공백으로 변환하면 전체 지도를 얻을 수 있습니다.
🧑🏻💻 코드
def solution(n, arr1, arr2):
answer = []
for row in range(n):
# 각 행끼리 비트 or 연산
password = bin((arr1[row] | arr2[row]))[2:]
# 비트 연산한 결과의 길이가 n보다 작다 -> 앞자리 0이 생략되었기 때문
# 생략된 0 추가
if len(password) < n:
password = "0" * (n - len(password)) + password
# 1, 0을 #과 공백으로 변환
password = password.replace("1", "#")
password = password.replace("0", " ")
answer.append(password)
return answer