πŸ“– Problem Solution/Programmers

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ‹€μŒ 큰 숫자 Swift

Fomagran πŸ’» 2020. 6. 21. 05:22
728x90
λ°˜μ‘ν˜•

문제 μ„€λͺ…

μžμ—°μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n의 λ‹€μŒ 큰 μˆ«μžλŠ” λ‹€μŒκ³Ό 같이 μ •μ˜ ν•©λ‹ˆλ‹€.

  • 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜ μž…λ‹ˆλ‹€.
  • 쑰건 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°―μˆ˜κ°€ κ°™μŠ΅λ‹ˆλ‹€.
  • 쑰건 3. n의 λ‹€μŒ 큰 μˆ«μžλŠ” 쑰건 1, 2λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 쀑 κ°€μž₯ μž‘μ€ 수 μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄μ„œ 78(1001110)의 λ‹€μŒ 큰 μˆ«μžλŠ” 83(1010011)μž…λ‹ˆλ‹€.

μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, n의 λ‹€μŒ 큰 숫자λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œ 사항

  • n은 1,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

n result
78 83
15 23

 

풀이: 

쑰건 1에 λΆ€ν•©ν•˜κΈ° μœ„ν•΄ answerλΌλŠ” λ³€μˆ˜λ₯Ό n+1둜 λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. -> var answer:Int = n+1

그리곀 while문을 μ‚¬μš©ν•΄ answerλ₯Ό 쑰건에 λΆ€ν•©ν•˜μ§€ μ•Šλ‹€λ©΄ +1을 ν•΄μ€λ‹ˆλ‹€. ->  while true{ ... answer += 1 }

쑰건 2에 λΆ€ν•©ν•˜κΈ° μœ„ν•΄ n의 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 갯수λ₯Ό μ•Œμ•„λƒ…λ‹ˆλ‹€. μš°μ„  String(n,radix:2)λ₯Ό 톡해 2μ§„μˆ˜λ‘œ λ°”κΏ”μ€€ λ’€ map으둜 각 λ¬Έμžλ“€μ„ λ‚˜λˆ μ€λ‹ˆλ‹€. 그리곀 filterλ₯Ό μ‚¬μš©ν•΄μ„œ 1만 κ±ΈλŸ¬λ‚Έ λ’€ countλ₯Ό μ‚¬μš©ν•˜μ—¬ κ·Έκ²ƒμ˜ 갯수λ₯Ό μ•Œμ•„λƒ…λ‹ˆλ‹€, -> let a = String(n, radix: 2).map{$0}.filter{$0 == "1"}.count

λ˜ν•œ answer도 λ˜‘κ°™μ΄ 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•΄ 1의 갯수λ₯Ό μ•Œμ•„λƒ…λ‹ˆλ‹€. -> let b = String(answer, radix: 2).map{$0}.filter{$0 == "1"}.count

쑰건 3에 λΆ€ν•©ν•˜κΈ° μœ„ν•΄μ„œ a와 bλ₯Ό λΉ„κ΅ν•΄μ„œ λ§Œμ•½ κ°™λ‹€λ©΄ while문을 λ°”λ‘œ νƒˆμΆœν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.. -> if a == b{    break  } 

그리고 answerλ₯Ό λ°˜ν™˜ν•΄μ£Όλ©΄ 쑰건 1,2,3에 λͺ¨λ‘ μΆ©μ‘±λ˜λŠ” 닡을 λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ->  return answer

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Foundation
 
func solution(_ n:Int-> Int
{
    var answer:Int = n+1
    while true{
        let a = String(n, radix: 2).map{$0}.filter{$0 == "1"}.count
        let b = String(answer, radix: 2).map{$0}.filter{$0 == "1"}.count
        if a == b{
            break
        }
        answer += 1
    }
    
    return answer
}

 

λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이:

nonzeroBitCountλΌλŠ” 것을 μ‚¬μš©ν•΄μ£Όλ©΄ μ΄μ§„μˆ˜μ—μ„œ 1의 갯수λ₯Ό 확인할 수 μžˆλ‹€.!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Foundation
 
func solution(_ n:Int-> Int {
    var answer : Int = n + 1
 
    while true {
        if n.nonzeroBitCount == answer.nonzeroBitCount {
            break;
        }
        answer += 1
    }
 
    return answer
}

 

 

 

728x90
λ°˜μ‘ν˜•