๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์œ„์žฅ Swift

by Fomagran ๐Ÿ’ป 2020. 5. 18.
728x90
๋ฐ˜์‘ํ˜•
  • ์œ„์žฅ
  • darklight

    sublimevimemacs

    Swift 

๋ฌธ์ œ ์„ค๋ช…

์ŠคํŒŒ์ด๋“ค์€ ๋งค์ผ ๋‹ค๋ฅธ ์˜ท์„ ์กฐํ•ฉํ•˜์—ฌ ์ž…์–ด ์ž์‹ ์„ ์œ„์žฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ŠคํŒŒ์ด๊ฐ€ ๊ฐ€์ง„ ์˜ท์ด ์•„๋ž˜์™€ ๊ฐ™๊ณ  ์˜ค๋Š˜ ์ŠคํŒŒ์ด๊ฐ€ ๋™๊ทธ๋ž€ ์•ˆ๊ฒฝ, ๊ธด ์ฝ”ํŠธ, ํŒŒ๋ž€์ƒ‰ ํ‹ฐ์…”์ธ ๋ฅผ ์ž…์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๋‚ ์€ ์ฒญ๋ฐ”์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ์ž…๊ฑฐ๋‚˜ ๋™๊ทธ๋ž€ ์•ˆ๊ฒฝ ๋Œ€์‹  ๊ฒ€์ • ์„ ๊ธ€๋ผ์Šค๋ฅผ ์ฐฉ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ข…๋ฅ˜์ด๋ฆ„

์–ผ๊ตด ๋™๊ทธ๋ž€ ์•ˆ๊ฒฝ, ๊ฒ€์ • ์„ ๊ธ€๋ผ์Šค
์ƒ์˜ ํŒŒ๋ž€์ƒ‰ ํ‹ฐ์…”์ธ 
ํ•˜์˜ ์ฒญ๋ฐ”์ง€
๊ฒ‰์˜ท ๊ธด ์ฝ”ํŠธ

์ŠคํŒŒ์ด๊ฐ€ ๊ฐ€์ง„ ์˜์ƒ๋“ค์ด ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด clothes๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ์˜ท์˜ ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • clothes์˜ ๊ฐ ํ–‰์€ [์˜์ƒ์˜ ์ด๋ฆ„, ์˜์ƒ์˜ ์ข…๋ฅ˜]๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ŠคํŒŒ์ด๊ฐ€ ๊ฐ€์ง„ ์˜์ƒ์˜ ์ˆ˜๋Š” 1๊ฐœ ์ด์ƒ 30๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์˜์ƒ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • clothes์˜ ๋ชจ๋“  ์›์†Œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๊ณ  ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž ๋˜๋Š” '_' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ŠคํŒŒ์ด๋Š” ํ•˜๋ฃจ์— ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ์˜์ƒ์€ ์ž…์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

 

clothes return
[[yellow_hat, headgear], [blue_sunglasses, eyewear], [green_turban, headgear]] 5
[[crow_mask, face], [blue_sunglasses, face], [smoky_makeup, face]] 3

ํ’€์ด: ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ํ•ด์‰ฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Swift๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ฃ !

์šฐ์„  ์˜์ƒ์˜ ์ข…๋ฅ˜๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ์˜์ƒ์˜ ์ด๋ฆ„์„ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.(์˜์ƒ์˜ ์ด๋ฆ„์€ ์—ฌ๋Ÿฌ๊ฐœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฐ์—ด์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.) -> var dic = [String:[String]]()

๊ทธ๋ฆฌ๊ณค clothes๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ ค for c in clothes{...}

๋งŒ์•ฝ key๊ฐ’์œผ๋กœ ์˜์ƒ์˜ ์ข…๋ฅ˜๊ฐ€ nil์ด ์•„๋‹ˆ๋ผ๋ฉด ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ•ด๋‹น ์˜์ƒ์˜ ์ข…๋ฅ˜๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์— ์˜์ƒ์˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€์‹œ์ผœ์ฃผ๊ณ  ->

  if dic[c[1]] != nil{ dic[c[1]]!.append(c[0]) }

์•„๋‹ˆ๋ผ๋ฉด ์˜์ƒ์˜ ์ข…๋ฅ˜๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ•ด๋‹น ์˜์ƒ์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค -> else{ dic[c[1]] = [c[0]] }

๊ทธ๋ฆฌ๊ณค ๋”•์…”๋„ˆ๋ฆฌ์•ˆ์— ๋ฐฐ์—ด๋“ค์˜ ๊ฐฏ์ˆ˜๋งŒ ๋”ฐ๋กœ count๋กœ ๋งคํ•‘ํ•ด์ค๋‹ˆ๋‹ค. -> let count = dic.mapValues{$0.count}.values

๊ทธ๋ฆฌ๊ณค reduce๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ˆ์— ๋‹ด๊ธด ๊ฐ ์ข…๋ฅ˜์˜ ๊ฐฏ์ˆ˜์— +1์„ ํ•ด์ค€ ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๊ณฑํ•œ๋’ค -1์„ ํ•ด์ฃผ๊ณ  returnํ•ด์ค๋‹ˆ๋‹ค. ->return count.reduce(1){$0*($1+1)} - 1

๊ฐ ์ข…๋ฅ˜์˜ ๊ฐฏ์ˆ˜์— +1์„ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ์•ˆ์ž…๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— +1์„ ํ•ด์ฃผ๊ณ  ๋งˆ์ง€๋ง‰์— -1์„ ํ•˜๋Š” ์ด์œ ๋Š” ๋ชจ๋‘ ๋‹ค ์•ˆ์ž…๋Š” ๊ฒฝ์šฐ๋Š” ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ „์ฒด์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Foundation
 
func solution(_ clothes:[[String]]) -> Int {
    var dic = [String:[String]]()
    for c in clothes{
        if dic[c[1]] != nil{
            dic[c[1]]!.append(c[0])
        }else{
            dic[c[1]] = [c[0]]
        }
    }
    let count = dic.mapValues{$0.count}.values
    return count.reduce(1){$0*($1+1)} - 1
}

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€