[Algorithm] 프로그래머스 튜플
Updated:
문제 설명
나의 풀이
import Foundation
func solution(_ s:String) -> [Int] {
var sCopy = s
sCopy.removeFirst()
sCopy.removeLast()
let replaceArr = sCopy.replacingOccurrences(of: "{", with:"")
let splitArr = replaceArr.split(separator: "}")
var numbers = [[Int]]()
for slice in splitArr {
numbers.append(slice.split(separator: ",").filter { $0 != " "}.map { Int($0)! })
}
let sortedNumbers = numbers.sorted(by: { $0.count < $1.count })
var answer = [Int]()
for numbers in sortedNumbers {
for number in numbers {
if answer.contains(number) {
continue
}
else {
answer.append(number)
}
}
}
return answer
}
고민한 점
먼저 어떻게 하면 문자열로 주어진 것을 숫자의 배열 형태로 바꿀 수 있을지를 고민했고, 거기서 앞 뒤의 괄호를 없애고 이후에 }
를 기준으로 한 번 자르고, 자른 것에서 ,
를 기준으로 자르되 잘랐을 때 공백이 아닌 즉 숫자들만 Int 형으로 변환하여 바꾸어주었습니다.
이후 정렬에 있어서도 2차원 배열을 정렬하는 방법에 대해서 고민했고 찾은 결과
let arr = [[1,2,3],[1],[2,3],[3,4,1,2]]
let sortedArr = arr.sorted(by: { $0.count < $1. count })
// arr = [[1],[2,3],[1,2,3],[3,4,1,2]]
위와 같이 작성하면 길이에 따라서 정렬되게 된다.
괜찮은 남의 풀이
import Foundation
func solution(_ s:String) -> [Int] {
var s = s
var answer = [Int]()
s.removeFirst(2)
s.removeLast(2)
s.components(separatedBy: "},{")
.map { $0.components(separatedBy: ",").map { Int($0)! } }
.sorted { $0.count < $1.count }
.forEach {
$0.forEach {
if !answer.contains($0) {
answer.append($0)
}
}
}
return answer
}
결국 초반에 어떻게 문자열 처리를 할 지에 대한 차이와 고차함수를 사용해서 깔끔하게 작성했다는 차이 인 것 같다.
Leave a comment