๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ์ด์ง„ ๋ณ€ํ™˜ ๋ฐ˜๋ณตํ•˜๊ธฐ

EarthSea 2024. 3. 25. 09:22

 

 

 

 

๐Ÿ„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด

โœ๐Ÿป Github

๋ฌธ์ œ ํ’€์ด github ๋งํฌ

 

 

๋ฌธ์ œ ์„ค๋ช…

0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ์–ด๋–ค ๋ฌธ์ž์—ด x์— ๋Œ€ํ•œ ์ด์ง„ ๋ณ€ํ™˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  1. x์˜ ๋ชจ๋“  0์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  2. x์˜ ๊ธธ์ด๋ฅผ c๋ผ๊ณ  ํ•˜๋ฉด, x๋ฅผ "c๋ฅผ 2์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด"๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, x = "0111010"์ด๋ผ๋ฉด, x์— ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋ฉด x = "0111010" -> "1111" -> "100" ์ด ๋ฉ๋‹ˆ๋‹ค.

0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. s๊ฐ€ "1"์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ s์— ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ–ˆ์„ ๋•Œ, ์ด์ง„ ๋ณ€ํ™˜์˜ ํšŸ์ˆ˜์™€ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ์ œ๊ฑฐ๋œ ๋ชจ๋“  0์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 150,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • s์—๋Š” '1'์ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

s result
"110010101001" [3,8]
"01110" [3,3]
"1111111" [4,1]

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • "110010101001"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ

1 "110010101001" 6 6 "110"
2 "110" 1 2 "10"
3 "10" 1 1 "1"
  • 3๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 8๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [3,8]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • "01110"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ

1 "01110" 2 3 "11"
2 "11" 0 2 "10"
3 "10" 1 1 "1"
  • 3๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 3๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [3,3]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • "1111111"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ

1 "1111111" 0 7 "111"
2 "111" 0 3 "11"
3 "11" 0 2 "10"
4 "10" 1 1 "1"
  • 4๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 1๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [4,1]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

๋‚˜์˜ ํ’€์ด

import Foundation

func solution(_ s:String) -> [Int] {
    
    var n = 0, count = 0
    
    func binaryTranslation(numStr: String) -> [Int] {
        if numStr == "1" {
            return [n, count]
        }
        var length = numStr.filter{ $0 == "1" }.count
        count += numStr.count - length
        n += 1
        return binaryTranslation(numStr: String(length, radix: 2))
    }
    
    return binaryTranslation(numStr: s)
}

 

๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ’€์–ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์šฐ์„  “0” ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ filter๋ฅผ ๋– ์˜ฌ๋ ธ๊ณ , ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ƒˆ์› ๋‹ค.

๋งˆ์นจ ์–ด์ œ [1์ฐจ] ๋น„๋ฐ€์ง€๋„๋ฅผ ํ’€๋ฉด์„œ ์‹ญ์ง„๋ฒ•์„ ์ด์ง„๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•™์Šตํ•˜์—ฌ ๋จธ๋ฆฟ์†์— ์•„์ง ๋‚จ์•„์žˆ์—ˆ๋‹ค.

ํ•œ๋ฒˆ ๋” ๋ณต์Šตํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์–ด์„œ ์•„์ฃผ ์ข‹๋‹ค!

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

import Foundation

func solution(_ s: String) -> Array<Int> {
    var copiedS = s
    var removedZero = 0
    var count = 0

    while copiedS != "1" {
        removedZero += copiedS.replacingOccurrences(of: "1", with: "").count
        copiedS = String(copiedS.replacingOccurrences(of: "0", with: "").count, radix: 2)
        count += 1
    }
    return [count, removedZero]
}

์ด๋ถ„์€ ๋‚˜๋ž‘ ๋‹ฌ๋ฆฌ ๋ฐ˜๋ณต๋ฌธ์„ ํ’€์—ˆ๋‹ค. 1๊ณผ 0์„ ์—†์• ๋Š” ๊ณผ์ •์„ replacingOccurrences๋ฅผ ์ด์šฉํ•ด count๋ฅผ ํ–ˆ๋‹ค. ์‹ ๊ธฐํ•˜๋‹ค.

 

์ค‘์š”ํ•œ ๊ฐœ๋…

  • ์‹ญ์ง„๋ฒ•์„ ์ด์ง„๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜
String(๋ฐ”๊พธ๋ ค๋Š” Int๊ฐ’, radix: 2)