πŸ‘©‍πŸ’»/JavaScript

[Programmers] JavaScript μ‹€νŒ¨μœ¨ κ΅¬ν•˜κΈ° / μ˜ˆμ‚° 문제

ν•œλ‚˜ 2021. 1. 28. 19:19

문제

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 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 값을 ν•˜λ‚˜μ”© μ¦κ°€μ‹œμΌœ λ°˜ν™˜ν•œλ‹€.