반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스(Lv.2) - 다음 큰 숫자 문제를 풀었습니다.
목차
Github
문제 링크
풀이
이번 문제는 진법 변환을 묻는 문제입니다.
처음 저는 String(,radix:) 로 진법을 변환하고 filter로 1의 개수를 셌는데요.
Int에 nonzeroBitCount라는 property가 존재했습니다.
nonzeroBitCount
공식문서에 따르면 2진수 표현에서 1 비트의 개수를 얻을 수 있다고 합니다.
이 문제와 찰떡인 프로퍼티로 코드와 실행 속도가 대폭 개선이 되었습니다.
실행 속도 비교
String 진법 변환과 filter를 이용한 풀이는 0.06 ~ 0.10ms 결과를 보여줬는데요.
nonzeroBitCount를 이용한 풀이는 0.01ms 채 걸리지 않는 결과를 보였습니다.
이런 문제가 있을 때 반드시 떠올려서 활용해야겠습니다.
전체 코드
import Foundation
func solution(_ n:Int) -> Int
{
var answer:Int = n + 1
while n.nonzeroBitCount != answer.nonzeroBitCount {
answer += 1
}
return answer
}
//func solution(_ n:Int) -> Int
//{
// var answer:Int = n + 1
// let oneCount = String(n, radix: 2).filter { $0 == "1" }.count
//
// while true {
// let oneCount2 = String(answer, radix: 2).filter { $0 == "1" }.count
// if oneCount == oneCount2 {
// break
// }
//
// answer += 1
// }
//
// return answer
//}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형