Swift랑 친해지기/programmers 풀기

[프로그래머스] 튜플 (Swift)

데브킹덕 2022. 12. 6. 18:45

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

변수 설정

  • result = s가 표현하는 튜플을 담은 Int형 배열
  • sArray = s문자열의 an마다 문자열 배열로 담고 an의 요소의 갯수를 기반으로 오름차순으로 정렬한 문자열 2차원 배열
  • tuple = sArray의 각 요소 1차원 문자열 배열
  • num = tuple의 각 요소인 문자열
  • number = num을 자료형이 Int로 바꾼 상수

나만의 풀이

1. "{{4,2,3},{3},{2,3,4,1},{2,3}}"

문자열이 주어질때 맨앞에 "{{" 와 맨뒤 "}}"를 제거해줌 - removeFirst, removeLast

 

2."4,2,3},{3},{2,3,4,1},{2,3" 

components 메서드를 통해 "},{"를 기점으로 문자열 배열로 나눠줌

 

3. ["4,2,3", "3", "2,3,4,1", "2,3"]

.sorted, .count메서드를 통해 요소(Character)의 갯수를 기반으로 오름차순으로 정렬

 

4.   ["3", "2,3", "4,2,3", "2,3,4,1"]  

.map , .components 메서드를 통해 ","을 기점으로 문자열 배열을 2차원 배열로 만들어줌

 

5. forEach 문을 이용하여 반복 실행하려는 코드를 파라미터로 받고, 저장된 요소는 클로저 상수로 전달

이때 result가 가지고 있지 않으면 Int형인 number를 추가하도록함

import Foundation

func solution(_ s:String) -> [Int] {
    var result = [Int]()
    var s = s
    s.removeFirst(2)
    s.removeLast(2)
    
    let sArray = s.components(separatedBy: "},{").sorted(by: {$0.count < $1.count}).map{$0.components(separatedBy: ",")}
    
    sArray.forEach({ tuple in
        tuple.forEach({ num in
            let number = Int(num)!
            if !result.contains(number){
                result.append(number)
            }
        })
    })
    
    return result
}