알고리즘/프로그래머스
프로그래머스 - 튜플
leeyuno
2021. 1. 22. 16:43
programmers.co.kr/learn/courses/30/lessons/64065?language=swift
코딩테스트 연습 - 튜플
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]
programmers.co.kr
반복문을 돌려서 {} 안의 숫자를 찾은다음
나온 배열을 길이 순서대로 정렬한다음 새로운 숫자를 한개씩 결과 배열에 담음
예제 1번 "{{2},{2,1},{2,1,3},{2,1,3,4}}"을 예를들면
반복문을 돌리면 [[2], [2, 1], [2, 1, 3], [2, 1, 3, 4]] 로 바뀌고
길이순으로 정렬해서 새로운 숫자를 한개씩 담으면
숫자배열 | 결과배열 | |
1 | [2] | [2] |
2 | [2, 1] | [2, 1] |
3 | [2, 1, 3] | [2, 1, 3] |
4 | [2, 1, 3, 4] | [2, 1, 3, 4] |
이런식으로 결과배열에 없고 숫자배열에만 있는 수를 한개씩 더함
최종코드
func solution(_ s:String) -> [Int] {
var temp_s = s
temp_s.removeFirst()
temp_s.removeLast()
var array = [[Int]]()
//{에서 }까지 안의 숫자를 잘라서 배열에 담기를 반복
while temp_s.contains("}") {
array.append(temp_s[temp_s.index(after: temp_s.firstIndex(of: "{")!) ..< temp_s.firstIndex(of: "}")!].split(separator: ",").map { Int($0)! })
temp_s.removeSubrange(temp_s.firstIndex(of: "{")! ... temp_s.firstIndex(of: "}")!)
}
array = array.sorted { $0.count < $1.count }
var result = [Int]()
//배열을 길이 순서로 정렬한 다음 한개씩 결과배열에 담음
for a in array {
if result.isEmpty {
result.append(a[0])
} else {
for aa in a {
if !result.contains(aa) {
result.append(aa)
}
}
}
}
return result
}
다풀고 다른분의 풀이를 보고 방법은 같은데 더 좋은 코드를 찾았다.
문자열을 숫자배열로 전환하는 코드
var sets = s.split(omittingEmptySubsequences: true, whereSeparator: { "}".contains($0) }).map {
$0.split(omittingEmptySubsequences: true, whereSeparator: { "{,".contains($0) }).map { Int($0)! }
}
길이별로 정렬한 배열에 한개씩 새로운 숫자를 더하는 코드
sets.forEach {
result.append(Array(Set($0).subtracting(result)).first!)
}