Algorithm Problem Solving/Programmers

[프로그래머스] 2019 카카오 개발자 겨울 인턴십 튜플 with Swift

코코자장자장 2022. 1. 3. 20:33

안녕하세요. 오늘은 프로그래머스 2레벨 튜플 문제를 풀어보겠습니다!

이 문제는 튜플을 표현하는 집합이 주어지면 튜플을 만들어내면 되는 문제입니다!

 

그러기 위해서 처음에는 튜플을 표현하는 집합을 배열로 옮겨줍니다!

 

seperatedBy와 components 메소드를 사용하면 쉽게 배열로 옮기실 수 있습니다.

 

그 후 집합중 집합의 사이즈가 1부터  N까지 있는데 거기에서 이전 집합을 차집합해주면 n번째 튜플인자가 나옵니다.

 

과정에서 for문이 지나치게 겹치기 때문에 차집합은 메소드로 구현하였습니다.

 

참고로 중복이 허용되기 때문에 차집합 과정에서 Set를 사용하지 못하였습니다!

 

import Foundation

func difference(_ integerArray1:[Int], _ integerArray2:[Int]) -> Int {
    var integerArray2 = integerArray2
    for i in integerArray1 {
        for j in 0..<integerArray2.count {
            if integerArray2[j] == i {
                integerArray2.remove(at: j)
                break
            }
        }
    }
    
    return integerArray2[0]
}

func solution(_ s:String) -> [Int] {
    var answer:[Int] = []
    let startIndex = s.index(s.startIndex, offsetBy: 2)
    let endIndex = s.index(s.endIndex, offsetBy: -2)
    let string = s[startIndex..<endIndex]
    let stringArray = string.components(separatedBy: "},{")
    
    var integerArray:[[Int]] = [[Int]]()
    var count = 0
    for s in stringArray {
        integerArray.append([])
        let currentIntegerArray = s.components(separatedBy: ",")
        integerArray[count] = currentIntegerArray.map({(stringElement :String)->Int in
            return Int(stringElement)!
        })
        count += 1
    }
    
    for i in 0..<integerArray.count {
        for array in integerArray {
            if array.count == i + 1 {
                answer.append(difference(answer, array))
                break
            }
        }
    }
    
    return answer
}

오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!

 

좋은 하루 되세요!