https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
간단한 문제다.
두 숫자를 OR 연산하여
1인경우는 #으로 0인경우는 빈칸으로 변환하여 반환하면된다.
Swift에서는 숫자를 진수로 표현하게해주는 String 이니셜라이저가 있다.
이를 활용하면 한줄로도 작성이 가능하다.
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
return zip(arr1, arr2).map{
String(repeating: " ", count: n-String($0|$1, radix:2).count) + String($0|$1, radix:2).map{$0 == "1" ? "#" : " "}.joined()
}
}
항상 편리함에 익숙해진다면 막상 없이 풀라고하면 막막하다.
편리한것도 좋지만, 한번쯤은 사용하지않고도 풀어보는것도 매우 좋다라고 생각한다.
( 면접에서도 종종 나오기도한다. A로 만들고 싶을때, B를 이용하지않고 어떻게 만들까요? 와 같은 질문들 )
아래는 OR연산한값을 통하여 2진수표현으로 나타내는 코드이다.
2진수는 2의최대배수로 1로 표시할 수 있다.
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
zip(arr1, arr2).map {
var check = Array(repeating: " ", count: n)
var x = $0|$1
var t = 1
var i = 0
while t <= x {
while t*2 <= x {
t *= 2
i += 1
}
check[n-i-1] = "#"
x -= t
i = 0
t = 1
}
return check.joined()
}
}
'코딩테스트' 카테고리의 다른 글
백준 1508 - 레이스 - swift (0) | 2021.06.23 |
---|---|
백준 1459 - 걷기 - swift (0) | 2021.06.23 |
백준 15961 - 회전초밥 - swift (0) | 2021.06.22 |
LeetCode - 17. Letter Combinations of a Phone Number - swift (0) | 2021.06.17 |
LeetCode - 20. Valid Parentheses - swift (0) | 2021.06.16 |