업로드중..

😎풀이

  1. 각 태스크가 소비할 시간을 저장할 배열 생성
  2. 종료되지 않은 쓰레드 스택 생성
  3. logs 순회
    3-1. 만약, 쓰레드가 시작될 경우 현재 시간을 미포함한 이전 시간과의 차를 이전 작업 소비 시간에 추가
    3-2. 쓰레드가 종료될 경우 현재 시간까지 포함한 이전 시간과의 차를 현재 작업 소비 시간에 추가
  4. 각 태스크별 소비한 시간 반환

핵심은, 시작이 중첩될 경우 현재 시간을 포함하지 않는 것, 종료될 경우 현재 시간을 포함

function exclusiveTime(n: number, logs: string[]): number[] {
    const spendTime = Array.from({ length: n }, () => 0)
    const threadStack: number[] = []
    let prevTime = 0
    for(const log of logs) {
        const [id, flag, timestamp] = log.split(":")
        const time = Number(timestamp)
        if(flag === 'start') {
            if(threadStack.length > 0) {
                spendTime[threadStack.at(-1)] += time - prevTime
            }
            threadStack.push(Number(id))
            prevTime = time
        } else {
            const poppedId = threadStack.pop()
            spendTime[poppedId] += time - prevTime + 1
            prevTime = time + 1
        }
    }
    return spendTime
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글