프로그래머스 LV2. 튜플
✅ 문제를 이해하기가 어려웠지 푸는데 어렵지는 않았음.
근데 왜 포스팅하냐면, 푸는데 오래걸려서.
정규 표현식으로 분리하려고 했는데, 사용하기가 불편했고, split을 통해서 "}"로 분리해서 작업을 했더니, 원하는 형태로 바꾸는데 for이 많이 들어가서 코드가 별로가 되었음.
근데 코드를 보니까 분리를 "},{"로 가능해 보여서 그렇게 설계함.
문제를 풀고난 후에 구글링을 하면서 코드 리팩토링까지 마침.
component와 split에 대해서 더 자세히 알아야겠다고 다짐하며 마침.
🟠 문제에서 이해가 가지 않는 부분 해석
"{{4,2,3},{3},{2,3,4,1},{2,3}}" // [3, 2, 4, 1]
{3}
{2,3}
{4,2,3}
{2,3,4,1}
이렇게 순서로 봐야한다.
처음에는 3이 있으니까 list에 3을 넣고
2번째에는 새로운 값이 2니까 2를 넣고 이렇게 반복
🟠 코드 설명
func solution(_ s:String) -> [Int] {
var s = s
s.removeFirst(2)
s.removeLast(2)
var list = [Int]()
s.components(separatedBy: "},{")
.map { $0.components(separatedBy: ",").map { Int($0)! } }
.sorted { $0.count < $1.count }
.forEach { elements in
elements.forEach { element in
if !list.contains(element) {
list.append(element)
}
}
}
return list
}
문제에서 원소가 중복되지 않는다고 가정하였으므로 contain으로 찾아도 된다.
만약 중복이 있다면 for을 사용해서 firstIndex로 계속지워나가다가 nil일 경우 새로운 값임을 캡처해야한다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[Swift] 프로그래머스 LV2. JadenCase 문자열 만들기 (0) | 2022.04.01 |
---|---|
[Swift] 프로그래머스 LV2. 모음사전 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV. 2 N개의 최소공배수 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV2. 삼각 달팽이 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV2. 피로도 (0) | 2022.04.01 |