π TIL - μ€λμ 무μμ λ°°μ λμ!
π μ΄μ체μ μ SFJ μκ³ λ¦¬μ¦ (μ΅μ μμ μ°μ μ€μΌμ€λ§)
μ΅μ μμ μ°μ μ€μΌμ€λ§ μ΄λ, κ° μμ μ νλ‘μΈμ μ€ν μκ°μ μ΄μ©νμ¬ νλ‘μΈμκ° μ¬μ© κ°λ₯ν λ μ€νμκ°μ΄ κ°μ₯ 짧μ μμ μ ν λΉνλ λ°©λ²
- νμ μ€νμκ°μ΄ 짧μ κ²λΆν° μ²λ¦¬νκΈ° λλ¬Έμ, νκ· λκΈ°μκ°μ΄ μ€μ΄λ λ€.
ν΄λΉ λ¬Έμ λ λΉμ μ μ€μΌμ€λ§ λ°©μμ΄λ€. λΉμ μ SFJ μ€μΌμ€λ§ λ°©λ²μ μ΄ν΄λ³΄μ.
- p1μ μ μ μ무 νλ‘μΈμ€κ° μκΈ° λλ¬Έμ λ°λ‘ μ€ννλ€.
- p1μ μ€ν μκ°μ΄ 1μΌλ, 2μΌλ, 3μΌλ, 4μΌλ κ°κ° p2, p3, p4, p5κ° λ€μ΄μ¨λ€.
- κ°κ°μ νλ‘μΈμ€ μ€ν μκ°μ λΉκ΅νμ¬ κ°μ₯ 짧μ νλ‘μΈμ€ p4λ₯Ό μΈμ§νκ³ p4λ₯Ό μ€ν μν¨λ€.
- p4μ μ€νμ΄ λλκ³ λμ κ·Έ λ€μμ μ€ν μκ°μ΄ 짧μ p3λ₯Ό μ€νμν¨λ€.
- p3μ μ€νμ΄ λλκ³ κ·Έ λ€μ μ€ν μκ°μ΄ 짧μ p5λ₯Ό μ€ν μν¨λ€.
- p5μ μ€νμ΄ λλκ³ κ·Έ λ€μ μ€ν μκ°μ΄ 짧μ p2λ₯Ό μ€ν μν¨λ€.
μ΄λ° λ°©μμΌλ‘ μ§νλλ©°, μλ λ¬Έμ μ λμΌν λ°©μμ΄λ€. κ·Έλλ‘ μ½λλ‘ κ΅¬ννλ©΄ λλ λ¬Έμ μλ€. (λλ λ§μ΄ μ₯ν©νκ² λμ΄μκ³ , SFJλ₯Ό λͺ°λμ΄μ λ¬Έμ λ₯Ό μ΄ν΄νλλ° μ‘°κΈ κ±Έλ Έλ€ γ γ μμ μ΄μ체μ μ€μν΄...β¨)
π‘ λ°νμκ° = μ μ°¨νΈμ μ€ν μμμ λ°λ₯Έ μ€ν μκ° + λκΈ°μκ°
π‘ λκΈ°μκ° = λ°νμκ° - μ€νμκ°
μ΄λ κ² κ²°κ³Όκ° λμ€κ² λλ€.
μ΄μ μ μ μ€μΌμ₯΄λ§ λ°©μμ κ°λ¨νκ² μμ보μ.
- p1μ μ무 νλ‘μΈμ€κ° μκΈ° λλ¬Έμ λ°λ‘ μ€νλλ€.
- μκ°μ΄ νλ₯΄κ³ μ€ν μκ°μ΄ 1μΌλ p2κ° λ€μ΄μ€λλ°, p2μ μ€ν μκ°(28)λ³΄λ€ p1μ μ€ν μκ°(10-1=9)κ° λ 짧기 λλ¬Έμ κ³μ μ§ννλ€.
- λ μκ°μ΄ νλ₯΄κ³ μ€ν μκ° 2μΌ λ p3κ° λ€μ΄μ€λλ° p1μ μ€ν μκ°(10-2=8)λ³΄λ€ p3μ μ€ν μκ°(6)μ΄ λ 짧기 λλ¬Έμ p1μ μ€νμ μ μ μ€λ¨νκ³ p3λ₯Ό μ€νμν¨λ€.
- μκ°μ΄ νλ₯΄κ³ μ€ν μκ° 3μΌλ p4κ° λ€μ΄μ€λλ° p3μ μ€ν μκ°(6-1=5)λ³΄λ€ p4μ μ€ν μκ°(4)κ° λ 짧기 λλ¬Έμ p3λ₯Ό μ μ μ€λ¨μν€κ³ p4λ₯Ό μ€ν μν¨λ€.
- μκ°μ΄ νλ₯΄κ³ μ€ν μκ°μ΄ 4μΌ λ p5κ° λ€μ΄μ€λλ°, p4μ μ€ν μκ°(4-1=3) λ³΄λ€ p5μ μ€ν μκ°(14)μ΄ κΈΈκΈ° λλ¬Έμ p4λ₯Ό κ·Έλλ‘ μ μ§μν¨λ€.
- μκ°μ΄ νλ₯΄κ³ μ€ν μκ°μ΄ 7μΌ λ p4μ μ€νμ λλ΄κ³ κ·Έ λ€μμΌλ‘ 짧μ p3λ₯Ό μ€νμν¨λ€.
- (λ°λ³΅)
κ²°κ΅μ μ΄λ¬ν κ°νΈμ°¨νΈκ° λμ¨λ€.
π λ¬Έμ λ§ν¬
https://school.programmers.co.kr/learn/courses/30/lessons/42627
π λ¬Έμ νμ΄
μ¬μ€ μ²μμ λ³΄κ³ 'ν'μκ³ λ¦¬μ¦μ μ¬μ©νλΌκ³ ν΄μ μ‘°κΈ ν€λ§Έλ€. νμ μ€μννΈμμ μ§μνμ§ μκΈ° λλ¬Έμ μ΄λ»κ² ꡬνν΄μΌν μ§ λ§λ§νκ³ , λλ체 μ΄κ² μ ... νμ μ¬μ©ν΄μΌνλμ§ λͺ°λλ€ γ γ (SFJμκ³ λ¦¬μ¦μ λͺ°λλ€,,)
νμ μ¬μ©ν΄μΌνλ μ΄μ λ, pythonμ μλ₯Ό λ€λ©΄, heap μ μ μ₯νλ©΄, μμ μμλλ‘ heap λ΄λΆμ μ λ ¬μ΄ λκ³ , heappopμ νκ² λλ©΄ μλμΌλ‘ κ°μ₯ μμ μκ° Popλλ€κ³ νλ€.
ν΄λΉ λ¬Έμ λ, 'μμ μμ μκ°'μ΄ μμ μμλλ‘ μ²λ¦¬νλ κ²μ΄ ν΅μ¬μ΄μμΌλ―λ‘, νμ μ¬μ©νλ©΄ λλ€κ³ μΈκΈλ κ²μ΄λ€.
κ·ΈλΌ μ μμ μμμκ°μ΄ μμ μμλλ‘ μ²λ¦¬ν΄μΌνλκ°?
μμμκ°μ΄ 짧μ μμλλ‘ μ§ννκ²λλ©΄, νκ· λκΈ°μκ°μ΄ μ€μ΄λ€κΈ° λλ¬Έμ΄λΌκ³ νλ€. μ΄λ μμ TIL ννΈμμ λ μμΈν μ€λͺ μ΄ λ κ²μ΄λ€.
κ·Έλμ λ¬Έμ λ μλμ κ°μ΄ νμλ€. μ€μννΈμμλ νμ΄ μμΌλ―λ‘ μ λ ¬μ μ ν΄μ£Όλκ² ν¬μΈνΈμλ€. κ·Έλ¦¬κ³ λλΆμ΄μ, λλλ μκ°μ νμλ¬λΌμ§λλ°, μμμκ° κ°λ₯ μκ°μ νμ κ°λ€. κ·Έλμ 'μμμκ°μ΄ λΉ λ₯Έ μμλλ‘', 'μμμκ°μ΄ κ°λ€λ©΄ μμμκ°μ΄ μμμμλλ‘' μ λ ¬ν΄μ£Όμλ€.
- λλ²μ μ λ ¬ κ³Όμ μ κ±°μΉλ€.
- κ·Έλ¦¬κ³ νμ¬μμ μ μ μ₯ν λ³μ now, λκΈ°μκ°κ³Ό μμμκ°μ λͺ¨λ ν©μΉ κ²°κ³Όλ₯Ό λ΄μ totalTime λ³μλ₯Ό λ§λ€μλ€.
- μ λ ¬λ jobs λ°°μ΄μμ remove νλ©΄μ μ§νν κ²μ΄κΈ° λλ¬Έμ (pythonμμλ heappop) jobsλ°°μ΄μ΄ μμ μμ΄μ§λκΉμ§ λ°λ³΅νκΈ°μν΄μ whileλ¬Έμ μ¬μ©νλ€.
- κ·Έ μμμ forλ¬Έμ μ΄μ©ν΄μ λ΄λΆμμ λΉμ₯ λν μ μλ μμ λ€μ μ°Ύμ κ²μ΄λ€.
- checkλΌλ λ³μλ, μμ μ λ§μΉ μκ° nowκ°, μμ μμ²μκ°λ³΄λ€ μμ κ²½μ°μ νμν΄μ λ£μλ€. check κ° trueλ‘ λ°λμ§ μλλ€λ©΄,νμ¬ μμ³₯λ μμ μ μμν μκ°μ΄ μμ§ λμ§ μμλ€λ λ»μ΄λ―λ‘, nowμ +1 μ© ν΄μ€λ€.
μ κ³Όμ μ μκ°νλλ° μ‘°κΈ μκ°μ΄ κ±Έλ Έλ€. κ·Έλμ μμ΄ν¨λλ‘ μ°¨κ·Όμ°¨κ·Ό κ·Έλ €λκ°λ©΄μ λ¬Έμ λ₯Ό νμλ€. (μ¬μ€ μΈν°λ·λ μ‘°κΈ μ°Έκ³ ;; )
π μ λ΅μ½λ
https://github.com/deslog/Algorithm/blob/main/Algorithm/Programmers/λμ€ν¬μ»¨νΈλ‘€λ¬/main.swift
import Foundation
var jobs = [[0, 3], [1, 9], [2, 6]]
// return 9
func solution(_ jobs:[[Int]]) -> Int {
var sortedJobs = jobs.sorted(by: { $0[0] == $1[0] ? $0[1] < $1[1] : $0[0] < $1[0] })
sortedJobs.sort(by: { $0[1] == $1[1] ? $0[0] < $1[0] : $0[1] < $1[1] })
var now = 0
var totalTime = 0
while !sortedJobs.isEmpty {
var check = false
for i in 0..<sortedJobs.count {
if sortedJobs[i][0] <= now {
now += sortedJobs[i][1]
totalTime += now - sortedJobs[i][0]
sortedJobs.remove(at: i)
check = true
break
}
}
// forλ¬Έμμλ€κ° λ£μ΄μ μκ° νμ°Έκ±Έλ Έλ€ γ
γ
if !check {
now += 1
}
}
return totalTime / jobs.count
}