-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogrammers_70129.swift
More file actions
74 lines (67 loc) · 2.78 KB
/
programmers_70129.swift
File metadata and controls
74 lines (67 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//
// programmers_70129.swift
// algo
//
// Created by 이재은 on 2020/11/11.
// Copyright © 2020 이재은. All rights reserved.
//
import Foundation
//programmers 70129 이진 변환 반복하기
//문제 설명
//0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
//
//x의 모든 0을 제거합니다.
//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 해야 합니다.
func solution(_ s: String) -> [Int] {
var s = s
var binaryCount = 0, zeroCount = 0
while s != "1" {
let length = s.count
s = s.filter { $0 != "0" }
zeroCount += length - s.count
s = String(s.count, radix: 2)
binaryCount += 1
}
return [binaryCount, zeroCount]
}
print(solution("110010101001")) // [3,8]
print(solution("01110")) // [3,3]
print(solution("1111111")) // [4,1]