https://school.programmers.co.kr/learn/courses/30/lessons/17681
binary라는 변수(= 이진수 문자열)를 사용해서 비밀지도를 푸는 방식
binary는 비트 OR 연산 결과를 이진수 문자열로 변환한 값
arr1[i] = 9, arr2[i] = 30이면
9 | 30 = 31
String(31, radix: 2) → 11111 → 이게 binary
func solution(_ n: Int, _ arr1: [Int], _ arr2: [Int]) -> [String] {
var result = [String]()
for i in 0..<n {
let combined = arr1[i] | arr2[i]
var binary = String(combined, radix: 2)
while binary.count < n {
binary = "0" + binary
}
let line = binary.map { $0 == "1" ? "#" : " " }.joined()
result.append(line)
}
return result
}
arr1[i], arr2[i]를 비트 OR 연산 → 둘 중 하나라도 벽이면 벽
arr1[i] = 9 → 01001, arr2[i] = 30 → 11110
→ OR 연산 결과 : 11111 (십진수 31)
combined을 2진수 문자열로 바꾼 것
String(31, radix: 2) → 11111
binary는 이진수 형태의 문자열
만약 이진수 문자열 길이가 n보다 짧으면 앞에 0을 붙여서 자릿수 보정
binary = 1001인데 n = 5이면
→ 01001로 바꿔야 지도의 가로 크기랑 맞음
이진수 문자열의 문자를 순회하면서
"1" → "#"
"0" → " "
"01001" → " # #"
완성된 줄을 결과 배열에 추가
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
i = 0
arr1[0] = 9 → 01001
arr2[0] = 30 → 11110
OR → 11111 → binary = "11111"
변환 → "#####"
정수 값을 2진수 문자열로 변환한 변수
String(정수, radix: 2)를 사용해서 얻음
비트 연산 결과를 보거나 가공할 수 있는 "0"/"1" 문자열로 바꿔줌
비트 연산은 빠르지만 읽기 어려운데
binary를 사용하면 문자열로 쉽게 조작 가능함
"1"은 "#", "0"은 " "로 바꾸는 데 유리함