반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/17681
풀이
// 방법 1 ("0"으로 이루어진 패딩을 계산적으로 추가해준 뒤 replacingOccurrences로 치환)
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var answer: [String] = []
for idx in 0..<n {
var str = String(arr1[idx] | arr2[idx], radix: 2)
str = String(repeating: "0", count: n-str.count) + str
str = str.replacingOccurrences(of: "0", with: " ")
str = str.replacingOccurrences(of: "1", with: "#")
answer.append(str)
}
return answer
}
// 방법 2 (2 << (n - 1)를 통해 패딩추가후 replacingOccurrences로 치환, 마지막에는 제일 앞의 1 제거)
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var answer: [String] = []
for idx in 0..<n {
var str = String(arr1[idx] | arr2[idx] | 2 << (n - 1), radix: 2)
str = str.replacingOccurrences(of: "0", with: " ")
str = str.replacingOccurrences(of: "1", with: "#")
str.removeFirst()
answer.append(str)
}
return answer
}
// 방법 3 (2 << (n - 1)를 통해 패딩추가후 map으로 치환)
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var answer: [String] = []
for idx in 0..<n {
var str = String(arr1[idx] | arr2[idx] | 2 << (n - 1), radix: 2)
str = String(str.map { $0 == "1" ? "#" : " " }[1...n])
answer.append(str)
}
return answer
}
// 방법 4 (방법 3을 한줄로 변경)
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
return (0..<n).map {
String(String(arr1[$0] | arr2[$0] | 2 << (n - 1), radix: 2).map {
$0 == "1" ? "#" : " "
}[1...n])
}
}
- swift에서 비트연산자를 써본게 처음이라 인상적인 문제였다.
- 나는 최초에 방법1로 문제를 해결했다.
2 << (n - 1)
를 통해 n개의 0을 만들고 제일 앞에 존재하는 1을 제거하는 것이 신박했다.
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 행렬 테두리 회전하기 (프로그래머스 lv2, 스위프트) (0) | 2022.02.13 |
---|---|
[알고리즘 연습] 실패율 (프로그래머스 lv1, 스위프트) (0) | 2022.02.09 |
[알고리즘 연습] 다트 게임 (프로그래머스 lv1, 스위프트) (0) | 2022.02.05 |
[알고리즘 연습] 시저 암호 (프로그래머스 lv1, 스위프트) (0) | 2022.02.02 |
[알고리즘 연습] 신규 아이디 추천 (프로그래머스 lv1, 스위프트) (0) | 2022.01.22 |