λ¬Έμ
νλ‘κ·Έλλ¨Έμ€ 2019 KAKAO BLIND RECRUITMENT μ€ν¨μ¨ λ¬Έμ
μ€ν¨μ¨μ μ€ν μ΄μ§μ λλ¬νμΌλ μμ§ ν΄λ¦¬μ΄νμ§ λͺ»ν νλ μ΄μ΄μ μ / μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄ μλ‘ μ μνλ€.
μ 체 μ€ν μ΄μ§μ κ°μ N, κ²μμ μ΄μ©νλ μ¬μ©μκ° νμ¬ λ©μΆ°μλ μ€ν μ΄μ§μ λ²νΈκ° λ΄κΈ΄ λ°°μ΄ stagesκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ€ν¨μ¨μ΄ λμ μ€ν μ΄μ§λΆν° λ΄λ¦Όμ°¨μμΌλ‘ μ€ν μ΄μ§μ λ²νΈκ° λ΄κ²¨μλ λ°°μ΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±νλΌ.
μ ν μ¬ν
- μ€ν μ΄μ§μ κ°μ Nμ 1 μ΄μ 500 μ΄νμ μμ°μμ΄λ€.
- stagesμ κΈΈμ΄λ 1 μ΄μ 200,000 μ΄νμ΄λ€.
- stagesμλ 1 μ΄μ N + 1 μ΄νμ μμ°μκ° λ΄κ²¨μλ€. κ° μμ°μλ μ¬μ©μκ° νμ¬ λμ μ€μΈ μ€ν μ΄μ§μ λ²νΈλ₯Ό λνλΈλ€. λ¨, N + 1 μ λ§μ§λ§ μ€ν μ΄μ§(N λ²μ§Έ μ€ν μ΄μ§) κΉμ§ ν΄λ¦¬μ΄ ν μ¬μ©μλ₯Ό λνλΈλ€.
- λ§μ½ μ€ν¨μ¨μ΄ κ°μ μ€ν μ΄μ§κ° μλ€λ©΄ μμ λ²νΈμ μ€ν μ΄μ§κ° λ¨Όμ μ€λλ‘ νλ©΄ λλ€.
- μ€ν μ΄μ§μ λλ¬ν μ μ κ° μλ κ²½μ° ν΄λΉ μ€ν μ΄μ§μ μ€ν¨μ¨μ 0 μΌλ‘ μ μνλ€
μ½λ
νμ΄
μ£Όμ΄μ§ 맀κ°λ³μ stagesλ 1λΆν° N+1κΉμ§μ μ«μλ₯Ό κ°λλ€. μ£Όμ΄μ§ 맀κ°λ³μ Nμ΄ 5λΌλ©΄ stagesμ νλ μ΄μ΄λ€μ 1λΆν° 6κΉμ§μ μ«μλ₯Ό κ°λλ€. (N+1μ κ°μ ν΄λΉ μ μ κ° μ€ν μ΄μ§ Nμ ν΄λ¦¬μ΄νλ€λ μλ―Έμ΄λ€.)
κ° μ€ν μ΄μ§λ³λ‘ μ€ν¨μ¨μ μμ보기 μν΄ for λ°λ³΅λ¬Έμ μννλ€. i = 1μΌ λ, μ¦ μ€ν μ΄μ§κ° 1μΌ λ stages λ°°μ΄μμ μ€ν μ΄μ§ μ«μ(1)μ μΌμΉνκ±°λ ν° κ²½μ°λ₯Ό μ°Ύλλ€. μΌμΉν κ²½μ°μλ ν΄λΉ μ μ λ μ€ν μ΄μ§λ₯Ό λμ μ€μ΄κ³ , μ€ν μ΄μ§ μ«μλ³΄λ€ ν΄ κ²½μ°, ν΄λΉ μ μ λ ν΄λΉ μ€ν μ΄μ§λ₯Ό λλΈ μνμ΄λ€.
κ° μ€ν μ΄μ§λ₯Ό λμ ν νλ μ΄λ₯Ό c_users λ‘, μμ§ ν΄λ¦¬μ΄νμ§ μμ μ μ λ p_usersλ‘ λκ³ μ€ν¨μ¨μ κ°λ¨νκ² κ³μ°ν μ μλ€.
μ΄λ κ² κ³μ°ν μ€ν¨μ¨μ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν΄ λ°ννλλ°, μ€ν¨μ¨μ΄ λμΌν κ²½μ° μ€ν μ΄μ§ λλ²κ° μμ μͺ½μ΄ λ¨Όμ μ€λλ‘ μ λ ¬ν΄μΌ νλ―λ‘ λ―Έλ¦¬ μ μΈν΄λ failRatesλΌλ λΉ λ°°μ΄ κ° μμ push() λ©μλλ₯Ό ν΅ν΄ μ½μ ν λ κ°μ²΄ ννλ‘ λ£μ΄μ£Όμλ€.
sort() λ©μλλ μ½λ°± ν¨μλ₯Ό 맀κ°λ³μλ‘ λ°μ λ€μν 쑰건μ κ±Έμ΄ μ λ ¬ν μ μλ€. sortμ 맀κ°λ³μλ‘ μ¨ μ½λ°± ν¨μλ μΈμ λ κ°λ₯Ό λ°κ³ , κ° μΈμλ failRatesμ μ΄μ , λ€μ κ°μΌλ‘ 'μΈμ ν κ°λ€'μ μλ―Ένλ€. 맀κ°λ³μ aμ bλ κ°κ° κ°μ²΄ ννλ‘ λ€μ΄μ€λ―λ‘, a.rate, a.stageμ²λΌ ν€λ₯Ό ν΅ν΄ valueμ μ κ·Όμ΄ κ°λ₯νλ€.
sort() λ©μλλ μ½λ μλ μ£Όμμ λ¬μλμ κ²μ²λΌ, λ κΉλνκ² μ½λλ₯Ό κ°μ ν μ μλ€. λν sort λ©μλκ° μ λ ¬μ΄ λ λ°°μ΄μ λ°ννλ―λ‘ map() λ©μλλ₯Ό ν λ² λ μ¬μ©ν΄ stageλ§μ μμλ‘ κ°μ§ λ°°μ΄μ λ°ννλλ‘ κ°μ ν μ μλ€.
λ¬Έμ
νλ‘κ·Έλλ¨Έμ€ Summer/Winter Coding (~2018) μμ° λ¬Έμ
Sμ¬μμλ κ° λΆμμ νμν λ¬Όνμ μ§μν΄ μ£ΌκΈ° μν΄ λΆμλ³λ‘ λ¬Όνμ ꡬ맀νλλ° νμν κΈμ‘μ μ‘°μ¬νμ΅λλ€. κ·Έλ¬λ, μ 체 μμ°μ΄ μ ν΄μ Έ μκΈ° λλ¬Έμ λͺ¨λ λΆμμ λ¬Όνμ κ΅¬λ§€ν΄ μ€ μλ μμ΅λλ€. κ·Έλμ μ΅λν λ§μ λΆμμ λ¬Όνμ κ΅¬λ§€ν΄ μ€ μ μλλ‘ νλ €κ³ ν©λλ€.
λ¬Όνμ κ΅¬λ§€ν΄ μ€ λλ κ° λΆμκ° μ μ²ν κΈμ‘λ§νΌμ λͺ¨λ μ§μν΄ μ€μΌ ν©λλ€. μλ₯Ό λ€μ΄ 1,000μμ μ μ²ν λΆμμλ μ νν 1,000μμ μ§μν΄μΌ νλ©°, 1,000μλ³΄λ€ μ μ κΈμ‘μ μ§μν΄ μ€ μλ μμ΅λλ€.
λΆμλ³λ‘ μ μ²ν κΈμ‘μ΄ λ€μ΄μλ λ°°μ΄ dμ μμ° budgetμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ΅λ λͺ κ°μ λΆμμ λ¬Όνμ μ§μν μ μλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- dλ λΆμλ³λ‘ μ μ²ν κΈμ‘μ΄ λ€μ΄μλ λ°°μ΄μ΄λ©°, κΈΈμ΄(μ 체 λΆμμ κ°μ)λ 1 μ΄μ 100 μ΄νμ λλ€.
- dμ κ° μμλ λΆμλ³λ‘ μ μ²ν κΈμ‘μ λνλ΄λ©°, λΆμλ³ μ μ² κΈμ‘μ 1 μ΄μ 100,000 μ΄νμ μμ°μμ λλ€.
- budgetμ μμ°μ λνλ΄λ©°, 1 μ΄μ 10,000,000 μ΄νμ μμ°μμ λλ€.
μ½λ
νμ΄
λ λ²μ§Έ λ¬Έμ λ sortλ₯Ό μ΄μ©νλ€. ν μ€λ‘ λ κ°λ¨νκ² μ¬μ©ν μμ μ΄λ€. νμ΄ν ν¨μλ₯Ό ν΅ν΄ sort((a,b)=>a-b);λ‘ μ€λ¦μ°¨μ μ λ ¬μ νλ€.
reduce ν¨μλ₯Ό μ¬μ©ν κΉ κ³ λ―Όνλ€κ°, λ무 μ₯ν©ν΄μ Έμ κ°λ¨νκ² μ κ·Όνλ€. for of λ°λ³΅λ¬Έμ λλ©°, κ° μμλ₯Ό sumμ λν΄λκ°λ©°, sumμ΄ budgetλ³΄λ€ κ°κ±°λ μμ λ cnt κ°μ νλμ© μ¦κ°μμΌ λ°ννλ€.