๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ฆŒ1 ์ด์ง„ ๋ณ€ํ™˜ Swift

by Fomagran ๐Ÿ’ป 2020. 11. 15.
728x90
๋ฐ˜์‘ํ˜•

Problem


 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ด์ง„ ๋ณ€ํ™˜ ๋ฐ˜๋ณตํ•˜๊ธฐ

 

programmers.co.kr

Solution


์ด์ง„๋ณ€ํ™˜ํ•œ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ -> var radix = s

0์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ - > var zeroCount = 0

ํšŒ์ฐจ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ -> var turn = 0

 

while๋ฌธ์„ ์ด์šฉํ•ด ์ด์ง„๋ณ€ํ™˜ํ•œ ์ˆ˜(radix)๊ฐ€ 1์ด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์ค๋‹ˆ๋‹ค. ->  while radix != "1" {

 

0์„ ์ œ๊ฑฐํ•œ ์ˆ˜๋Š” ๊ณง ์ „์ฒด๋ฌธ์ž์—์„œ 1๋งŒ ํ•„ํ„ฐ๋งํ•œ ๊ธ€์ž์ด๋ฏ€๋กœ filter๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด 1๋งŒ ๊ฑธ๋Ÿฌ์ค๋‹ˆ๋‹ค.

-> let one = radix.filter{ $0 == "1"}

 

์ „์ฒด๋ฌธ์ž์˜ ๊ธธ์ด์—์„œ 1์˜ ๊ฐฏ์ˆ˜๋งŒํผ ๋บ€ ๊ฒƒ์ด 0์˜ ๊ฐฏ์ˆ˜์ด๋ฏ€๋กœ ๋บ€ ์ˆซ์ž๋ฅผ zeroCount์— ๋”ํ•ด์ค๋‹ˆ๋‹ค.

 

1์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ด์ง„๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. - >  radix = String(one.count,radix:2)

 

๊ทธ๋ฆฌ๊ณ  ํšŒ์ฐจ๋ฅผ ๋Š˜๋ ค์ค๋‹ˆ๋‹ค, - > turn += 1

 

๋งˆ์ง€๋ง‰์œผ๋กœ 1์ด ๋˜์—ˆ๋‹ค๋ฉด ํšŒ์ฐจ์™€ 0์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. -> return [turn,zeroCount]

 

Source Code


func solution(_ s:String) -> [Int] {
//์ด์ง„ ๋ณ€ํ™˜ํ•œ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
var radix = s
//0์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
var zeroCount = 0
//ํšŒ์ฐจ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
var turn = 0
//1์ด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
while radix != "1" {
//์ด์ง„๋ณ€ํ™˜ํ•œ ์ˆ˜ ์ค‘ 1๋งŒ ํ•„ํ„ฐํ•œ ๊ธ€์ž
let one = radix.filter{ $0 == "1"}
//์ „์ฒด ๋ฌธ์ž์—์„œ 1์˜ ์ˆซ์ž๋ฅผ ๋นผ๋ฉด 0์˜ ๊ฐฏ์ˆ˜์ด๋ฏ€๋กœ ๋บ€ ์ˆซ์ž๋ฅผ ๋”ํ•ด์ค€๋‹ค.
zeroCount += radix.count - one.count
//1์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ด์ง„ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.
radix = String(one.count,radix:2)
//ํšŒ์ฐจ๋ฅผ ๋Š˜๋ ค์ค€๋‹ค.
turn += 1
}
//ํšŒ์ฐจ๋ž‘ 0์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
return [turn,zeroCount]
}
solution("1111111")
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€