λ¬Έμ μ€λͺ
μ μ¬μκ°μ λλμ΄ λ€μ΄, μΌλΆ νμμ΄ μ²΄μ‘볡μ λλλΉνμ΅λλ€. λ€νν μ¬λ² 체μ‘λ³΅μ΄ μλ νμμ΄ μ΄λ€μκ² μ²΄μ‘볡μ λΉλ €μ£Όλ € ν©λλ€. νμλ€μ λ²νΈλ 체격 μμΌλ‘ λ§€κ²¨μ Έ μμ΄, λ°λ‘ μλ²νΈμ νμμ΄λ λ°λ‘ λ·λ²νΈμ νμμκ²λ§ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€. μλ₯Ό λ€μ΄, 4λ² νμμ 3λ² νμμ΄λ 5λ² νμμκ²λ§ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€. 체μ‘λ³΅μ΄ μμΌλ©΄ μμ μ λ€μ μ μκΈ° λλ¬Έμ 체μ‘볡μ μ μ ν λΉλ € μ΅λν λ§μ νμμ΄ μ²΄μ‘μμ μ λ€μ΄μΌ ν©λλ€.
μ 체 νμμ μ n, 체μ‘볡μ λλλΉν νμλ€μ λ²νΈκ° λ΄κΈ΄ λ°°μ΄ lost, μ¬λ²μ 체μ‘볡μ κ°μ Έμ¨ νμλ€μ λ²νΈκ° λ΄κΈ΄ λ°°μ΄ reserveκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, 체μ‘μμ μ λ€μ μ μλ νμμ μ΅λκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν 쑰건
- μ 체 νμμ μλ 2λͺ μ΄μ 30λͺ μ΄νμ λλ€.
- 체μ‘볡μ λλλΉν νμμ μλ 1λͺ μ΄μ nλͺ μ΄νμ΄κ³ μ€λ³΅λλ λ²νΈλ μμ΅λλ€.
- μ¬λ²μ 체μ‘볡μ κ°μ Έμ¨ νμμ μλ 1λͺ μ΄μ nλͺ μ΄νμ΄κ³ μ€λ³΅λλ λ²νΈλ μμ΅λλ€.
- μ¬λ² 체μ‘λ³΅μ΄ μλ νμλ§ λ€λ₯Έ νμμκ² μ²΄μ‘볡μ λΉλ €μ€ μ μμ΅λλ€.
- μ¬λ² 체μ‘볡μ κ°μ Έμ¨ νμμ΄ μ²΄μ‘볡μ λλλΉνμ μ μμ΅λλ€. μ΄λ μ΄ νμμ 체μ‘볡μ νλλ§ λλλΉνλ€κ³ κ°μ νλ©°, λ¨μ 체μ‘λ³΅μ΄ νλμ΄κΈ°μ λ€λ₯Έ νμμκ²λ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€.
μ μΆλ ₯ μ
n | lost | reserve | return |
5 | [2, 4] | [1, 3, 5] | 5 |
5 | [2, 4] | [3] | 4 |
3 | [3] | [1] | 2 |
λ΄ λ¬Έμ νμ΄
import Foundation
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
var student = Array<Int>(repeating: 1, count: n)
var result = 0
for i in 0..<lost.count {
student[lost[i]-1] -= 1
}
for i in 0..<reserve.count {
student[reserve[i]-1] += 1
}
if student[0] == 0 && student[1] == 2 {
student[0] = 1
student[1] = 1
}
if student[n-1] == 0 && student[n-2] == 2 {
student[n-1] = 1
student[n-2] = 1
}
if n > 2 {
for i in 1..<n-1 {
if student[i] == 0 {
if student[i-1] == 2 {
student[i] = 1
student[i-1] = 1
}
else {
if student[i+1] == 2 {
student[i] = 1
student[i+1] = 1
}
}
}
}
}
for i in 0..<n {
if student[i] == 0 {
result += 1
}
}
return n - result
}
- λ¨Όμ νμ μ ν¬κΈ°μ λ°°μ΄μ μμ±νκ³ , 1μ© μ μ₯ν΄μ£Όμλ€.
- κ·Έ λ€μ 체μ‘볡μ μμ΄λ²λ¦° νμμ -1, μ¬λΆμ΄ μλ νμμ +1 ν΄μ£Όμλ€. (맨 μ forλ¬Έ λ κ°)
- κ·Έλ¦¬κ³ μ΄μ 체μ‘볡μ λΆλ°°ν μ°¨λ‘μΈλ°, μ°μ 맨 μ νμκ³Ό 맨 λ€ νμλ§ μμΈλ‘ μ²λ¦¬ν΄μ£Όμλ€.
(맨 첫 λ²μ§Έ νμμ΄ μ²΄μ‘λ³΅μ΄ μκ³ , κ·Έ λ€μ νμμ΄ μ¬λ²μ΄ μμ κ²½μ°,
κ·Έλ¦¬κ³ λ§¨ λ€ νμμ΄ μ²΄μ‘λ³΅μ΄ μκ³ , κ·Έ μ νμμ΄ μ¬λ²μ΄ μμ κ²½μ°!) - κ·Έλ¦¬κ³ νμ μκ° 3λͺ
μ΄μμΌ κ²½μ° forλ¬ΈμΌλ‘ 체μ‘볡μ λ°°λΆνλ€.
(2λͺ μ΄νμΌ κ²½μ° μμ μμΈ μ²λ¦¬λ€λ‘ λΆλ°° κ°λ₯νκΈ° λλ¬Έ!) - forλ¬Έμ λ°°μ΄μ 1λΆν° n-2κΉμ§ λ°λ³΅ν΄μ£Όμλ€. (0, n-1μ μμμ μ²λ¦¬νκΈ° λλ¬Έ)
- forλ¬Έ μμμλ λ§μ½ student λ°°μ΄μ i λ²μ§Έ νμμ΄ 0μΌ κ²½μ° μ, λ€ νμμ΄ μ¬λ²μ κ°λμ§ νμΈνλ€.
- λ¨Όμ μ νμμ΄ μ¬λ²μ΄ μλ€λ©΄ (2 λΌλ©΄) κ·Έ νμμκ² λΉλ¦¬κ³ , μ νμμ΄ μ¬λ²μ΄ μκ³ λ€ νμμ΄ μλ€λ©΄ λΉλ €μ£Όμλ€.
- μμ κ°μ λ°©μμΌλ‘ μ§νν ν, forλ¬Έμ μ΄μ©ν΄ λ°°λΆμ΄ λλ¬μμλ 체μ‘λ³΅μ΄ μλ νμ μλ₯Ό ꡬνλ€.
- μ 체 νμ μμμ 체μ‘λ³΅μ΄ μλ νμ μλ₯Ό λΉΌμ£Όμ΄ λ°ννλ€.
μΈμμ μΈ νμ΄
import Foundation
func solution(_ n: Int, _ lost: [Int], _ reserve: [Int]) -> Int {
let newReserve = reserve.filter { !lost.contains($0) }
let newLost = lost.filter { !reserve.contains($0) }
var lostPeople: Int = newLost.count
newReserve.forEach {
let isLend: Bool = newLost.contains($0 - 1) || newLost.contains($0 + 1)
if isLend && lostPeople > 0 {
lostPeople -= 1
}
}
return n - lostPeople
}
- λ¨Όμ filterλ₯Ό μ¬μ©νμ¬ μ¬λ²μ΄ μλ νμ μ€ λλ λΉνμ§ μμ νμλ€λ‘ newReserve λ°°μ΄μ μμ±,
λλλΉν νμλ€ μ€ μ¬λ²μ΄ μλ νμλ€λ‘ newLost λ°°μ΄μ μμ±ν΄μ£Όμλ€. - μ¬λ² μμ΄ μμ΄λ²λ¦° νμλ€μ λͺ μλ₯Ό lostPeopleμ μ μ₯νλ€.
- newReserveμ forEachλ₯Ό μ¬μ©ν΄ λ°λ³΅ν΄μ£Όμκ³ ,
newReserveμ νμμ μ, λ€ νμμ΄ newLost λ°°μ΄μ ν¬ν¨λλ νμμΈμ§ κ²μ¬νλ€. - λ§μ½ κ²μ¬ κ²°κ³Όκ° trueμ΄λ©΄μ 체μ‘λ³΅μ΄ μλ νμμ΄ 1λͺ μ΄μμΌ κ²½μ° lostPeopleμμ ν λͺ μ λΉΌμ£Όλ κ²μ λ°λ³΅νλ€.
- λ§μ§λ§μΌλ‘ μ 체 νμ μμμ 체μ‘λ³΅μ΄ μλ νμ μλ₯Ό λΉΌμ£Όμ΄ λ°ννλ€.
π‘ νΌλλ°±
- filterμ containsλ₯Ό μ μ ν μ¬μ©νμ¬ μ λ§ ν¨κ³Όμ μΈ μ½λλ₯Ό μμ±ν κ²,, λ무 λλ¨νλ€
- λλ λ€μν ν¨μλ₯Ό λ§μ΄ μ¬μ©ν΄λ³΄λ©° λμ± κ°κ²°νκ² μ½λλ₯Ό μμ±ν μ μλλ‘ μ°μ΅ν΄μΌκ² λ€,,
π [ μΆκ° ] 1μ£ΌμΌ ν λ€μ νμ΄λ³΄κΈ°
func solution2(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
var stu = Array(repeating: 1, count: n)
for i in 0..<lost.count { stu[lost[i]-1] -= 1 }
for i in 0..<reserve.count { stu[reserve[i]-1] += 1 }
if stu[0]==0 && stu[1]==2 { stu[0]=1; stu[1]=1 }
if stu[n-1]==0 && stu[n-2]==2 {stu[n-1]=1; stu[n-2]=1}
for i in 1..<n-1 {
if stu[i]==0 {
if stu[i-1]==2 { stu[i-1]=1; stu[i]=1 }
else if stu[i+1]==2 { stu[i]=1; stu[i+1]=1 }
}
}
return stu.filter({$0 > 0}).count
}
- νμ μλ§νΌ 1μ μ±μ΄ λ°°μ΄μ λ§λ€μ΄μ€ ν μμ΄λ²λ¦° νμμ -1, μ¬λΆμ΄ μλ νμμ +1 ν΄μ£Όμλ€.
- 첫 λ²μ§Έ νμμ΄ μ²΄μ‘λ³΅μ΄ μλ μν©κ³Ό λ§μ§λ§ νμμ΄ μ²΄μ‘λ³΅μ΄ μλ μν©μ λ°λ‘ λΉΌμ ν΄κ²°νλ€.
- forλ¬Έμμλ [1]λ²μ§Έ νμλΆν°, 체μ‘λ³΅μ΄ μλ€λ©΄ μ΄μ νμμκ² μ°μ , μλλ©΄ λ€ νμμκ² λΉλ¦¬λ μμΌλ‘ μμ±νλ€.
- filter μ¬μ©νμ¬ μ²΄μ‘볡μ ν κ° μ΄μ κ°μ§κ² λ νμλ€μ μλ₯Ό μΆλ ₯νλ€.
- 첫 λ²μ§Έ νμ΄λ³΄λ€ ν¨μ¬ κ°κ²°νκ² μ μμ±νλ― νλ€!!
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] μμ λ§λ€κΈ° Programmers(Lv.1) (0) | 2021.06.18 |
---|---|
[Swift Algorithm] λ‘λμ μ΅κ³ μμμ μ΅μ μμ Programmers(Lv.1) (0) | 2021.06.18 |
[Swift Algorithm] μμ λνκΈ° Programmers(Lv.1) (0) | 2021.06.18 |
[Swift Algorithm] λ΄μ Programmers(Lv.1) (0) | 2021.06.18 |
[Swift Algorithm] 3μ§λ² λ€μ§κΈ° Programmers(Lv.1) (0) | 2021.06.18 |
λκΈ