본문 바로가기

ALGORITHM

[Swift] Lv2.위장 (Dictionary)

https://programmers.co.kr/learn/courses/30/lessons/42578?language=swift

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

아무 생각없이 c++ 처럼 풀다가

아 Swift 인데 값이 없을 땐 Int 값을 더해주지 못하는구나.. nil 이니까 당연하지

라는 생각으로 무지성 코딩으로 for문과 if 문으로 풀었습니다..

 

절대 이거보다 더 이쁘게 코드를 짤 수 있겠다 싶어서 다른사람들의 풀이를 보면서 반성과 깨달음을..

 

전체코드

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    
    var result = 1
    var clothesDict: Dictionary<String, Int> = [:]
    
    for cloth in clothes {
        if clothesDict[cloth[1]] == nil {
            clothesDict[cloth[1]] = 1
        } else {
            clothesDict.updateValue(clothesDict[cloth[1]]! + 1, forKey: cloth[1])
        }
    }
    
    for (key, value) in clothesDict {
        result *= value + 1
    }
    
    return result - 1
}

 

 

다른 사람의 풀이를 보면서 든 여러 잡생각

 

음 guard let 으로 새로운 count 변수를 만들어서 처리했구나

guard let 이나 if let을 쓰려다가 만들 변수가 뭐지..?  했는데 이렇게 짜도 깔끔한 것 같다. 

적어도 내 코드보단 Swift 스럽다..ㅎㅎ

 

코드들을 보다가 compactMap 이라는 함수가 나오는데 자세히 알아봐야겠다.

이차원 배열을 map으로 만드는 함수 같은데 알아두면 편리할듯하다.