1689. Partitioning Into Minimum Number Of Deci-Binary Numbers
문제 설명
- deci-binary라는 개념이 나왔다. (0과1로만 이루어진 10진수)
- 주어진 숫자를 몇개의 deci-binary사용해서 충족시킬 수 있는지 계산해내라...(최솟값)
문제접근
- 사실상 각 자리에 최대가 1이 들어가는거라고 생각을 하면되는데,
- 만약에 0자리에 1을빼주게 되면 이 친구가 9가 되면서 빼주기 곤란한 상황이 생기니 그 자리에 해당하는 숫자는 0과 1중에 0을 집어넣어야 한다는 정도를 알아챘다.
- 그럼 결국 그냥 자리수 제일 높은 친구가 정답인것 같기도 ,, ?
문제 풀이
- String을 Int 배열로 바꿔주고 거기에서 가장 큰 값을 추출했다.
- 결국 해당 숫자를 만들기보다 해당 숫자에서 어떻게 0을 만들것인가를 찾아내려했던 것이 핵심인 듯 보였다.
- 1이랑 0으로 빼줄거를 다 빼준다치면은 자리수에 상관없이 가장 큰수 있는애가 빠질때 0이 될테니까
class Solution {
func minPartitions(_ n: String) -> Int {
return Array(n).map { Int(String($0))! }.max()!
}
}
Accepted
97 / 97 testcases passed
타인의 코드
class Solution {
func minPartitions(_ n: String) -> Int {
var array: [Int] = []
for i in n {
let digit = Int(String(i))
array.append(digit ?? 0)
}
return array.max() ?? 0
}
}
가장 우수한 사람의 코드인데, 나랑 차이는 Array(n)을 해줄 것이냐 그냥 for문으로 바로 돌려줄 것이냐? 정도가 다른것 같았다. 아마 간단한 코드여서 그리 큰 차이가 발생되는 건 기대하기 어려웠을지도?
그런데 이렇게 앞에서부터 해줄 생각하니까 결국 자연수중에 가장큰 수인 9를 발견하면 바로 나가리 되게해주면 빠르게 나오지 않을까? 싶어서 그렇게 한번 해당 코드를 고쳐서 제출해봤다.
원본코드 제출
9만났을때 탈출코드 포함한 것 제출
class Solution {
func minPartitions(_ n: String) -> Int {
var array: [Int] = []
for i in n {
let digit = Int(String(i))
if(digit == 9){
return 9
}
array.append(digit ?? 0)
}
return array.max() ?? 0
}
}