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

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

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

๋ฌธ์ œ ์„ค๋ช…

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • ์ž‘์—…์˜ ๊ฐœ์ˆ˜(progresses, speeds๋ฐฐ์—ด์˜ ๊ธธ์ด)๋Š” 100๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์ง„๋„๋Š” 100 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์†๋„๋Š” 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋ฃจ์˜ ๋์— ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋„์œจ์ด 95%์ธ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ•˜๋ฃจ์— 4%๋ผ๋ฉด ๋ฐฐํฌ๋Š” 2์ผ ๋’ค์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

progressess speed return
[93,30,55] [1,30,5] [2,1]

ํ’€์ด: ์šฐ์„  while์„ ์ด์šฉํ•ด end ์ง‘ํ•ฉ์ด progresses๋งŒํผ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์„ ํ•ด์ค€๋‹ค. (์ง‘ํ•ฉ์œผ๋กœ ํ•œ ์ด์œ ๋Š” ์ค‘๋ณต์„ ์—†์• ๊ธฐ ์œ„ํ•ด)

๊ทธ๋ฆฌ๊ณค for๋ฌธ์„ ์ด์šฉํ•ด progress๋ผ๋Š” progresses ๋ณต์‚ฌ๋ณธ์— ๊ฐ speed๋งŒํผ ๋”ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  100์ด ๋„˜๋Š” ๊ฒฝ์šฐ์—” wait์ด๋ผ๋Š” ์ง‘ํ•ฉ์— index๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

๋งจ ์ฒ˜์Œ ๊ฐ’์ด index 0์ด 100์ด ๋„˜๋Š” ๊ฒฝ์šฐ์— ๋ฌด์กฐ๊ฑด 100%๊ฐ€ ๋˜๋ฉด ๋๋‚˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ end์ง‘ํ•ฉ์— ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  progress[0] = 0์œผ๋กœ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ๋งˆ์ง€๋ง‰์— ์„ค๋ช…ํ•จ.

๊ทธ๋ฆฌ๊ณ  ๋งจ ์ฒ˜์Œ ๊ฐ’์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—” end์ง‘ํ•ฉ์— ๋ฐ”๋กœ ๊ทธ ์ „ index(end.count-1)๊ฐ€ ์žˆ๊ณ ,wait์— ํ˜„์žฌ index(end.count)๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  

์กฐ๊ฑด์— ๋ถ€์‘ํ•˜๋ฉด end์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  count๋ฅผ +1ํ•ด์ค€๋‹ค. ์ž๋™์œผ๋กœ end.count๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ while๋ฌธ์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณค count๊ฐ€ 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ count๋ฅผ answer์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ progress[0] = 0 ์„ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด count๊ฐ€ ๋ฌด์กฐ๊ฑด +1๋œ ์ƒํƒœ์ด๋ฏ€๋กœ 1์ด ๊ณ„์† ์ถ”๊ฐ€๋˜๊ฒŒ ๋œ๋‹ค. progress[0]์„ 0์œผ๋กœ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด count +1์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import Foundation
 
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
    var end:Set<Int> = []
    var progress = progresses
    var answer = [Int]()
    var wait:Set<Int> = []
    while end.count != progresses.count{
        var count = 0
        for i in 0...progresses.count - 1 {
            progress[i] += speeds[i]
            if progress[i] >= 100 {
                wait.insert(i)
                if i == 0 {
                    end.insert(0)
                    progress[0= 0
                    count += 1
                }
                while end.contains(end.count-1&& wait.contains(end.count){
                    end.insert(end.count)
                    count += 1
                }
        }
        }
        if count > 0{
            answer.append(count)
        }
    }
    return answer
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€