이차원 시계열 배열에서 중복된 구간 찾는 방법

박진현·2023년 11월 1일
0

[['yyyy-mm-dd, hh:mm:ss', yyyy-mm-dd, hh:mm:ss'], ....]
이렇게 생긴 이차원 시계열 배열 안에서, 특정배열이 중복된 구간이 있는지 확인하는 로직을 구현했다.

function hasDuplicatedInterval({
    intervalToCheck,
    intervals,
  }: {
    intervalToCheck: TInterval;
    intervals: TInterval[];
  }): boolean => {
    // Intervals 안에 중복된 값이 있는지 검증
    const [startToCheck, endToCheck] = intervalToCheck;
    const sortedIntervals = intervals
      .filter(([start, end]) => start !== startToCheck && end !== endToCheck)
      .map(([start, end]) => ({
        start: new Date(start as string),
        end: new Date(end as string),
      }))
      .sort((a, b) => a.start.getTime() - b.start.getTime());

    // 중복된 구간을 검사
    for (const { start, end } of sortedIntervals) {
      if (
        start <= new Date(endToCheck as string) &&
        end >= new Date(startToCheck as string)
      ) {
        return true; // 중복 발견
      }
    }

    // 중복된 값이 없으면 false를 반환
    return false;
  }
profile
👨🏻‍💻 호기심이 많고 에러를 좋아하는 프론트엔드 개발자 박진현 입니다.

0개의 댓글