๐Ÿ“† 23.02.05 - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV 2. ํ˜ธํ…” ๋Œ€์‹ค

๋ฒ„๋“คยท2023๋…„ 2์›” 5์ผ
1

โœจToday I Learn (TIL)

๋ชฉ๋ก ๋ณด๊ธฐ
24/62
post-custom-banner

์ด๋ฒˆ์— ์ƒˆ๋กญ๊ฒŒ ๋ ˆ๋ฒจ 2 ๋ฌธ์ œ๊ฐ€ ์˜ฌ๋ผ์™”๊ธธ๋ž˜ ๋ƒ…๋‹ค ํ’€์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.
์—ญ์‹œ ํ™˜๊ธฐ ํ•œ๋ฒˆ ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์ฝ”ํ…Œ ํ’€๊ธฐ๋งŒํ•œ๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„..?

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV 2. ํ˜ธํ…” ๋Œ€์‹ค

https://school.programmers.co.kr/learn/courses/30/lessons/155651

๋ฌธ์ œ

์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค book_time์˜ ๊ธธ์ด โ‰ค 1,000
  • book_time[i]๋Š” ["HH:MM", "HH:MM"]์˜ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • [๋Œ€์‹ค ์‹œ์ž‘ ์‹œ๊ฐ, ๋Œ€์‹ค ์ข…๋ฃŒ ์‹œ๊ฐ] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ์€ HH:MM ํ˜•ํƒœ๋กœ 24์‹œ๊ฐ„ ํ‘œ๊ธฐ๋ฒ•์„ ๋”ฐ๋ฅด๋ฉฐ, "00:00" ๋ถ€ํ„ฐ "23:59" ๊นŒ์ง€๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์˜ˆ์•ฝ ์‹œ๊ฐ์ด ์ž์ •์„ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์‹œ์ž‘ ์‹œ๊ฐ์€ ํ•ญ์ƒ ์ข…๋ฃŒ ์‹œ๊ฐ๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๋Ÿฐ ํ˜•ํƒœ๋‹ค. ์ž…์‹ค์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ‡ด์‹ค๋„ ํ•ด์•ผ๋˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐ์ง€์‚ฌ. ๊ทธ๋Ÿฐ๋ฐ ํ‡ด์‹คํ•˜๊ณ  ๋ฐ”๋กœ ์ž…์žฅ์ด ๊ฐ€๋Šฅํ•œ๊ฒŒ ์•„๋‹ˆ๋ผ 10๋ถ„์˜ ์ธํ„ฐ๋ฒŒ์ด ์ฃผ์–ด์ง„๋‹ค๋Š” ์†Œ๋ฆฌ๋‹ค.

book_time ์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด [["15:00","17:00"], ["16:40", "18:20"] ... ] ์ธ ๋ถ€๋ถ„์˜ ๊ฒฐ๊ณผ๊ฐ€ 3๊ฐœ ์ฆ‰ ์ตœ์†Œ ๊ฐ์‹ค์˜ ์ˆ˜๊ฐ€ 3์ด๋ผ๊ณ  ํ•œ๋‹ค.

์šฐ์„  ์ด ๋ฐฐ์—ด๋“ค์ด ์‹œ๊ฐ„๋Œ€ ์ˆœ์œผ๋กœ ๋‚˜์—ด๋˜์ง€ ์•Š์•˜์Œ์œผ๋กœ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ๋†“๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด, 14:10 ~ 19:20, 14:20 ~ 15:20, 15:00 ~ 17:00 ์˜ ์‹œ๊ฐ„๋Œ€๊ฐ€ ๊ฒน์น˜๋‹ˆ ์ตœ์†Œ 3๊ฐœ์˜ ๋ฐฉ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ํ›„ 16:40 ~ ๋ฐฉ์€ 15:20์— ์ด๋ฏธ ๋‚˜์˜จ ๋ฐฉ์ด ์žˆ์œผ๋‹ˆ ๊ทธ ๋ฐฉ์„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , 18:20 ~ ๋ฐฉ์€ 14:10 or 15:00 ๋ฐฉ์ด ์ด๋ฏธ ๋‚˜์™€ ์žˆ์œผ๋‹ˆ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฐ ํ˜•์‹์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์šฐ์„  ์‹œ๊ฐ„ ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ string ํ˜•์‹์˜ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ number๋กœ ์ „ํ™˜ํ•˜๊ณ  ๋™์‹œ์— ์‹œ ์™€ ๋ถ„ ์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ์ƒ๊ฐ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ์กด์˜ ์ •๋‹ต์„ ์š”ํ•˜๋Š” solution ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ณ€ํ™˜์„ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด์ž.

์‹œ, ๋ถ„ ๋ถ„ํ•  ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

const siAndBun = (time) => {
  const [si, bun] = time.split(":").map((x) => +x);
  return si * 60 + bun; 
}

time ์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ ์‹œ์™€ ๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” siAndBun ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์— ์‹œ์™€ ๋ถ„์„ ๋ฐ›์•„์•ผ ๋˜๋Š”๋ฐ ํ•ด๋‹น 2์ฐจ์› ๋ฐฐ์—ด์˜ ์•ˆ์ชฝ์„ ๋ณด๊ฒŒ ๋˜๋ฉด ๋ฌธ์ž์—ด๋กœ ๊ตฌ๋ถ„์ง€์–ด ์žˆ์œผ๋‹ˆ : ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•œ ์ˆ˜ Number ํ˜•ํƒœ๋กœ ํ˜•๋ณ€ํ™˜ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ [์‹œ(si), ๋ถ„(bun)] ํ˜•ํƒœ์˜ ์ƒˆ๋กœ์šด ์ˆซ์ž ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ 2๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด ์ž‘์„ฑ์„ ํ•˜์˜€๋‹ค.
๊ทธ ํ›„ ์‹œ๊ฐ„ ๊ณ„์‚ฐ์— ์šฉ์ดํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

๋ฌธ์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด๋ณด๊ธฐ

function solution(book_time) {
  const timeArray = Array.from({length: siAndBun('23:59') + 10}, () => 0);
  
  book_time.map((time, idx) => {
   const [checkIn, checkOut] = time;
    let start = siAndBun(checkIn);
    const end = siAndBun(checkOut) + 10;
    
    for(start; start <= end; start++) {
     timeArray[start]++; 
    }
  });
 return Math.max(...timeArray) ;
}

์œ„์—์„œ ๋งŒ๋“  ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋จผ์ € ์ด solution ์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋ฌธ์ œ์—์„œ ์ œ๊ณตํ•œ book_time์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  timeArray๋ผ๋Š” ๋ณ€์ˆ˜๋กœ Array.from ๋ฉ”์„œ๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์—ฌ ์–•์€ ๋ณต์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ book_time์„ map์„ ๋Œ๋ ค, 2์ฐจ์› ๋ฐฐ์—ด์˜ depth level 2์˜ ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  1๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฐฐ์—ด์ด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋“ค์„ ์œ„์—์„œ ๋งŒ๋“  siAndBun์œผ๋กœ ๋ถ„์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
๊ทธ ํ›„ ์‹œ์ž‘์—์„œ ๋๊นŒ์ง€ ์‹œ์ž‘์  ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์ตœ์†Œ์˜ ๊ฐ์‹ค ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ 10๋ถ„ ์ธํ„ฐ๋ฒŒ์„ ๊ณ ๋ คํ•˜์—ฌ + 10์„ ํ•˜์˜€๋Š”๋ฐ ๋ถ€๋ถ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ด๋Ÿฌํ•˜๋‹ค. 10์‹œ 10๋ถ„์— ์ฒดํฌ์•„์›ƒ์„ ํ•˜๊ณ  10์‹œ 20๋ถ„์— ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ด๋‹ค. +10์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ฒดํฌ์ธ ์‹œ๊ฐ„์ด ๋‹ค๊ฐ€์™€๋„ ์•„์ง ์ฒญ์†Œ๊ฐ€ ๋๋‚˜์ง€ ์•Š์•„, 10์‹œ 10๋ถ„ ๋ฐฉ์„ ์ด์šฉ์„ ๋ชปํ•˜๊ธฐ์— ๊ฒฐ๊ณผ๊ฐ’์ด 2๊ฐ€ ๋‚˜์™€ ๊ธฐ๋Œ“๊ฐ’๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์„ธ๋ถ€์ ์œผ๋กœ ์ดํ•ดํ•œ๋‹ค๋ฉด ์ด 10๋ถ„์ด 9๋ถ„ 59์ดˆ์˜ 10๋ถ„๊ณผ 10๋ถ„ 59์ดˆ๊นŒ์ง€์˜ 10๋ถ„์˜ ์ •์˜๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋งŒ์•ฝ ์•„๋‹ˆ๋ผ๋ฉด ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค!

๊ทธ๋ž˜์„œ +9๋กœ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ 2๋ฒˆ๋„ ํ•ด๊ฒฐ์ด ๋œ๋‹ค.

profile
ํƒœ์–ด๋‚œ ๊น€์— ๋งŽ์€ ๊ฒฝํ—˜์„ ํ•˜๋ ค๊ณ  ์•„๋“ฑ๋ฐ”๋“ฑ ์• ์“ฐ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€