프론트엔드 개발자의 기록 공간

[투포인트] 결혼식 본문

알고리즘_JS/인프런 JS알고리즘

[투포인트] 결혼식

[리우] 2022. 3. 26. 00:19

🚩  결혼식 문제 (투포인트)

 

📖 문제 설명 : 결혼식에 참석하는 친구들의 도착 시간과 떠나는 시간이 제각각이다.

이때 최대로 겹치는 친구들의 시간을 구해라. (자세한 내용은 강의 및 문제지 참고)

* A의 떠나는 시간과 B의 도착시간이 같을 경우 겹치는 시간에서 제외한다. 즉, 떠나는 시간 미 포함

 

💡 도착시간, 떠나는 시간 기준으로 각각 나누어서 정렬 후 투 포인트로 시간 판단

 

function solution(arr) {
  let answer = 0

  let arrival = [] // 도착 시간
  let exit = [] // 퇴장 시간
  arr.forEach((element) => {
    arrival.push(element[0])
    exit.push(element[1])
  })

  arrival.sort((a, b) => a - b)
  exit.sort((a, b) => a - b)

  let cnt = 0 // 겹치는 인원 카운트
  let i = 0 // arrival Index
  let j = 0 // exit Index
  while (i < arrival.length + 1 && j < exit.length) {
    if (arrival[i] < exit[j]) {
      cnt += 1
      i += 1
    } else {
      cnt -= 1
      j += 1
    }
    answer = answer > cnt ? answer : cnt
  }
  return answer
}

let arr = [
  [14, 18],
  [12, 15],
  [15, 20],
  [20, 30],
  [5, 14],
]
console.log(solution(arr)) // 2

 

👨‍💻 코드 설

1. 도착 시간과 떠나는 시간을 각각 나누어 오름차순 정렬

2. 투 포인트로 도착 시간 배열과 떠나는 시간 배열을 순차적으로 비교해서 떠나는 시간이

더 크다면 겹치기 때문에 카운트 +1

3. 도착 시간이 더 크다면 한 명이 빠졌기 때문에 카운트 -1

4. 2번, 3번 과정을 투 포인트로 사용한 도착 시간, 떠나는 시간 배열의 인덱스가 종료될 때까지 순회
(마지막 종료까지 카운트하기 위해 도착 시간의 인덱스는 +1까지 포함)

 

잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.

728x90
Comments