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

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

by Fomagran ๐Ÿ’ป 2020. 3. 25.
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์„ ํ–‰ ์Šคํ‚ฌ์ด๋ž€ ์–ด๋–ค ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ๊ฐ€ ์ŠคํŒŒํฌ → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์ผ๋•Œ, ์ฌ๋”๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๊ณ , ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ์ŠคํŒŒํฌ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ˆœ์„œ์— ์—†๋Š” ๋‹ค๋ฅธ ์Šคํ‚ฌ(ํž๋ง ๋“ฑ)์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŒŒํฌ → ํž๋ง → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ฌ๋” → ์ŠคํŒŒํฌ๋‚˜ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ŠคํŒŒํฌ → ํž๋ง → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill๊ณผ ์œ ์ €๋“ค์ด ๋งŒ๋“  ์Šคํ‚ฌํŠธ๋ฆฌ1๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด skill_trees๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์กฐ๊ฑด

  • ์Šคํ‚ฌ์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ, ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ‚ฌ ์ˆœ์„œ์™€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ฌธ์ž์—ด๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, C → B → D ๋ผ๋ฉด CBD๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค
  • ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 26 ์ดํ•˜์ด๋ฉฐ, ์Šคํ‚ฌ์€ ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • skill_trees๋Š” ๊ธธ์ด 1 ์ด์ƒ 20 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • skill_trees์˜ ์›์†Œ๋Š” ์Šคํ‚ฌ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • skill_trees์˜ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 2 ์ด์ƒ 26 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ด๋ฉฐ, ์Šคํ‚ฌ์ด ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

skill skill_trees return
"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2

ํ’€์ด:๋จผ์ € skill์— ์žˆ๋Š” ๋ฌธ์ž๋“ค์„ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ  ๋„ฃ์–ด์ค€๋‹ค.(var a)

๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ๋Œ๋ฆฌ๊ณ  filter๋ฅผ ์ด์šฉํ•ด skill_trees์— ์žˆ๋Š” ๋ฌธ์ž์—ด๋“ค ์ค‘ a์™€ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด arr์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  while๋ฌธ์œผ๋กœ a์™€ arr์˜ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•ด์ฃผ๊ณ  ์ˆœ์„œ๊ฐ€ ๋งž๋‹ค๋ฉด ์ฐจ๋ก€๋กœ ๋งจ ์ฒ˜์Œ ์ธ๋ฑ์Šค๋ฅผ ์—†์• ์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด break๋ฅผ ํ•œ ๋’ค count๋ฅผ -1

ํ•ด์ค€๋‹ค.

count๋ฅผ skill_trees์•ˆ์— ์žˆ๋Š” ํฌ๊ธฐ๋งŒํผ ์žก์•„์ฃผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ์žˆ๋Š” ๊ฒƒ๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ count๊ฐ€ ๋œ๋‹ค.

์†Œ์š”์‹œ๊ฐ„: 10๋ถ„

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import Foundation
 
func solution(_ skill:String, _ skill_trees:[String]) -> Int {
    var count = skill_trees.count
    for i in skill_trees {
        var a = skill.map{$0}
        var arr = i.filter{a.contains($0)}
        while !arr.isEmpty {
            if a.first == arr.first {
                a.removeFirst()
                arr.removeFirst()
            }else {
                count -= 1
                break
            }
        }
    }
    return count
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

์ตœ๋Œ€ํ•œ ์ค„์—ฌ๋ณธ ๊ฒƒ

1
2
3
4
import Foundation
func solution(_ skill:String, _ skill_trees:[String]) -> Int {
    return skill_trees.map{$0.filter{skill.map{$0}.contains($0)}}.filter{skill.prefix($0.count) == $0}.count
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด ์ค‘ ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ

skill์˜ ๋ฌธ์ž๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” skill_trees๋ฅผ ๋ชจ์•„ prefix๋กœ ๋น„๊ตํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
import Foundation
 
func solution(_ skill:String, _ skill_trees:[String]) -> Int {
    var result = 0
    for tree in skill_trees {
        let list = tree.filter { skill.contains($0) }
        let prefix = skill.prefix(list.count)
        if prefix == list {
            result += 1
        }
    }
    return result
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€