ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€-Swift

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μœ„μž₯(Swift)

CheonD 2022. 10. 14. 10:00

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μœ„μž₯(Swift)

 

 

 λ¬Έμ œ μ„€λͺ…

 

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

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

 λ‚˜μ˜ 풀이

 

λ‹€λ₯Έ μ˜·μ„ μ‘°ν•©ν•΄μ„œ μž…λŠ” 경우의 μˆ˜λŠ” μΉ΄ν…Œκ³ λ¦¬λ§ˆλ‹€ 이 μΉ΄ν…Œκ³ λ¦¬μ— ν•΄λ‹Ήν•˜λŠ” μ˜μƒμ„ μž…μ§€ μ•ŠλŠ”λ‹€μ˜ κ²½μš°μ™€ 이 μΉ΄ν…Œκ³ λ¦¬μ— λͺ‡κ°œμ˜ μ˜μƒμ΄ μžˆλŠ”μ§€λ§Œ κ³ λ €ν•˜λ©΄ λœλ‹€.

 

예λ₯Όλ“€μ–΄ μƒμ˜μ—λŠ” 2벌, ν•˜μ˜μ—λŠ” 3벌이 μžˆμ„λ•Œ μƒμ˜λ₯Ό μ•„μ˜ˆ μ•ˆ μž…κ±°λ‚˜ 1번 ν˜Ήμ€ 2λ²ˆμ„ κ³ λ₯΄λŠ” 경우 -> 3, ν•˜μ˜λ₯Ό μ•„μ˜ˆ μ•ˆ μž…κ±°λ‚˜ 1번 ν˜Ήμ€ 2번 ν˜Ήμ€ 3λ²ˆμ„ κ³ λ₯΄λŠ” 경우 -> 4ν•΄μ„œ 총 12가지 경우의 μˆ˜κ°€ λ‚˜μ˜¨λ‹€. μ—¬κΈ°μ„œ ν•œ κ°€μ§€λŠ” κΌ­ μž…μ–΄μ•Όν•˜λŠ” 쑰건이 μžˆμœΌλ‹ˆ -1만 ν•΄μ£Όλ©΄ λœλ‹€.

 

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    var dic: [String: Int] = [:]
    
    for cloth in clothes {
        if dic[cloth[1]] == nil {
            dic[cloth[1]] = 1
        } else {
            dic[cloth[1]]! += 1
        }
    }
    var result = 1
    for x in dic {
        result *= (x.1+1) 
    }
    
    return result-1
}

 

 λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

 

compactMap, Set, reduceλ₯Ό 적절히 μ‚¬μš©ν•œ 풀이이닀.

 

compactMap은 보톡은 2μ°¨μ›λ°°μ—΄μ—μ„œ μ‚¬μš©ν•˜λ©΄ 2차원 λ°°μ—΄λ‘œ 리턴을 ν•˜μ§€λ§Œ μ•„λž˜ μ½”λ“œμ²˜λŸΌ $0.last!둜 ν•œ 개의 숫자만 λ¦¬ν„΄ν•˜κ²Œ λœλ‹€λ©΄ 1차원 λ°°μ—΄λ‘œ λ¦¬ν„΄ν•˜κ²Œ λœλ‹€. (μ™œμΈμ§€λŠ” λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. ν˜Ήμ‹œ μ•Œκ³  κ³„μ‹œλ©΄ λŒ“κΈ€ λΆ€νƒλ“œλ €μš”!) 

 

그리고 κ³ μ°¨ν•¨μˆ˜λ₯Ό μ“Έλ•Œ μ–΄λŠ 타이밍에 filterλ₯Ό μ“°κ³  reduceλ₯Ό 써야할지 ν—·κ°ˆλ¦΄ 수 μžˆλŠ”λ° 항상 "λ‚΄κ°€ 무엇을 λ§Œλ“œλŠ”κ°€"에 μ§‘μ€‘ν•˜λ©΄ λœλ‹€.

 

μ•„λž˜ μ˜ˆμ‹œμ—μ„œλŠ” 각각 μ˜μƒμ˜ μ’…λ₯˜μ— 따라 카운트λ₯Ό λˆ„μ μ‹œν‚€κ³  μ‹Άμ—ˆκΈ° λ•Œλ¬Έμ— catoriesλ₯Ό λ§€ν•‘ν–ˆκ³  clothesλ₯Ό μ „λΆ€ λŒλ©΄μ„œ ν•΄λ‹Ήν•˜λŠ” 것을 filter -> countν–ˆλ‹€. 

 

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    let types = clothes.compactMap{ $0.last! }
    let setType = Set(types)
    let categories = Array(setType)
    
    let counts = categories.map { category in
        return clothes.filter{ $0.last! == category }.count + 1
    }
    
    return counts.reduce(1, {$0 * $1}) - 1  
}

 

 ν”Όλ“œλ°±

 

λ”•μ…”λ„ˆλ¦¬λ₯Ό for문으둜 μ ‘κ·Όν•  λ•Œ νŠœν”Œμ²˜λŸΌ .μ—°μ‚°μžλ‘œ keyλ‚˜ value에 접근이 κ°€λŠ₯ν•˜λ‹€.

 

let dic: [String: Int] = ["a": 1, "b": 2]
for x in dic {
	print(x.1 terminator:" ") // output: 1 2
}