안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스(Lv.2) - 다음 큰 숫자 문제를 풀었습니다.
목차
Github
GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘
스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.
github.com
문제 링크
코딩테스트 연습 - 다음 큰 숫자
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니
programmers.co.kr
풀이
이번 문제는 진법 변환을 묻는 문제입니다.
처음 저는 String(,radix:) 로 진법을 변환하고 filter로 1의 개수를 셌는데요.
Int에 nonzeroBitCount라는 property가 존재했습니다.
nonzeroBitCount
Apple Developer Documentation
developer.apple.com
공식문서에 따르면 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
//}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.