binary

hyun·2025년 7월 4일
0

iOS

목록 보기
27/54

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
}

1. let combined = arr1[i] | arr2[i]

arr1[i], arr2[i]를 비트 OR 연산 → 둘 중 하나라도 벽이면 벽

arr1[i] = 9 → 01001, arr2[i] = 30 → 11110
→ OR 연산 결과 : 11111 (십진수 31)

2. var binary = String(combined, radix: 2)

combined을 2진수 문자열로 바꾼 것

String(31, radix: 2) → 11111

binary는 이진수 형태의 문자열

3. while binary.count < n { binary = "0" + binary }

만약 이진수 문자열 길이가 n보다 짧으면 앞에 0을 붙여서 자릿수 보정

binary = 1001인데 n = 5이면
→ 01001로 바꿔야 지도의 가로 크기랑 맞음

4. let line = binary.map { $0 == "1" ? "#" : " " }.joined()

이진수 문자열의 문자를 순회하면서

"1" → "#"
"0" → " "

"01001" → " # #"

5. result.append(line)

완성된 줄을 결과 배열에 추가

 전체 흐름

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"
변환 → "#####"

 binary

정수 값을 2진수 문자열로 변환한 변수

String(정수, radix: 2)를 사용해서 얻음

비트 연산 결과를 보거나 가공할 수 있는 "0"/"1" 문자열로 바꿔줌

비트 연산은 빠르지만 읽기 어려운데

binary를 사용하면 문자열로 쉽게 조작 가능함

"1"은 "#", "0"은 " "로 바꾸는 데 유리함

0개의 댓글