728x90
반응형
programmers.co.kr/learn/courses/30/lessons/17681?language=swift
지도1과(배열) 지도2(배열) 두 개를 조건에 따라 합친 결과를 나타내주면 된다.
다만 배열의 원소가 Int로 주어지는데 2진법으로 바꾸어 표기해야한다.
* 이번에 String(숫자, radix:2)를 하면 2진법 표현으로 바꿔 보여주는 걸 처음 알았다....!
하나라도 #이면 #으로 표기 둘 다 빈칸이어야 빈칸으로 표기되는 조건이다.
크게 거쳐야할 과정이 많지는 않다.
1. 2진법으로 배열 표현
1-1. 자리수 맞춰주기
2. 조건에 따라 값 할당하기
바로 코드로!
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
// 2진법으로 변환
var secrets = arr1.map {String($0, radix:2)}
var secrets_2 = arr2.map {String($0, radix:2)}
// 자리수 안맞는 것들 맞춰주기
func convert(_ arr: inout [String]) {
for (i,a) in arr.enumerated() {
if a.count < n {
arr[i] = String(repeating: "0", count: (n-a.count)) + String(a)
}
}
}
convert(&secrets)
convert(&secrets_2)
// 빈 정답 배열 생성
var answer = Array(repeating: "", count:n)
// 조건에 따라 정답 배열에 값 할당
for i in 0..<n {
let str = secrets[i]
let str2 = secrets_2[i]
for j in 0..<n {
let v1 = str[str.index(str.startIndex, offsetBy: j)]
let v2 = str2[str2.index(str2.startIndex, offsetBy: j)]
if String(v1) == "1" || String(v2) == "1" {
answer[i] += "#"
} else {
answer[i] += " "
}
}
}
return answer
}
[ 프로세스 ]
* 위 설명 참고
크게 어렵진 않았으나, String(n, radix:2)를 처음 알았다는 것과 inout 파라미터를 사용해서 변환시켰던 것, String은 여전히 string.index로 접근해야한다는 것...
파이썬에서 슬라이싱하다가 스위프트에서 계속 슬라이싱하려니 익숙하지가 않다.. 계속 피하고픈 느낌..!
그래도 상황에 맞게 사용하려면 문자열 다루는 방법은 계속 여러 방면으로 연습해두면 좋을 것 같다.
728x90
반응형