πŸ“– Problem Solution/Programmers

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ κΈ°λŠ₯개발 Swift

Fomagran πŸ’» 2020. 3. 23. 12:11
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
λ°˜μ‘ν˜•