본문 바로가기

개발/알고리즘

[프로그래머스] 2019 Kakao Winter Internship - 튜플

반응형
 

코딩테스트 연습 - 튜플

"{{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. 집합 안의 ,를  기준으로 수를 구한다
3. 구한 수를 배열에 넣는다
3.1 이미 있는 수일 경우 넣지 않는다

Swift 전체 코드 

코드 가독성 개선 전 

var value = s
var array : [Int] = []
value.removeFirst(2)
value.removeLast(2)
let pieces = value.components(separatedBy: "}").sorted(by: { $0.count < $1.count })

for i in value {
    var text = ""
    var count = 0
    
    for j in i {
        let a = Character(extendedGraphemeClusterLiteral: j)
        if a.isNumber {
            text.append(a)
        }
        
        if a == "," || count == i.count - 1 {
            if !text.isEmpty && !array.contains(Int("\(text)")!) {
                array.append(Int("\(text)")!)
                break
            }
            text = ""
        }
        count += 1
    }
}

코드 가독성 개선 후 

var value = s
var array : [Int] = []
value.removeFirst(2)
value.removeLast(2)
value.components(separatedBy: "},{")
    .map{ $0.components(separatedBy: ",").map { Int($0)!} }
    .sorted(by: { $0.count < $1.count })
    .forEach {
        $0.forEach {
            if !array.contains($0) {
                array.append($0)
            }
        }
    }


return array
반응형