자바스크립트 코딩테스트 '결혼식'

릿·2021년 8월 27일
0

코딩테스트

목록 보기
4/27

결혼식 피로연에 올 수 있는 친구들의 총 피로연 체류시간을 [x(피로연장 도착시간), y(귀가시간)]로 표현한 2차원 배열이 주어진다.
피로연 시간대 중, 최대 같이 있는 친구들 수를 리턴하는 문제.
단, 3시에 귀가하는 친구는 3시에는 피로연장에 없고, 3시에 오는 친구는 3시에 피로연장에 있다고 간주한다.

  1. 내 풀이 :
    2차원 배열을 sort 오름차순 정렬한 다음, 친구수 for문과 times[0][0]부터 times[times.length-1][1]까지의 for문을 돌려서 동시간대 존재하는 친구를 cnt에 카운트 한 다음, max값에 저장 후 answer로 리턴한다.
function solution(times){
    let answer=0;
    let max=Number.MIN_SAFE_INTEGER;
    times.sort((a, b) => {
        if (a[0] < b[0]) return a[0] - b[0];
    });
    console.log(times)
    for (let i=times[0][0]; i<times[times.length-1][1]; i++)
        let cnt=0;
        for (let j=0; j<times.length; j++) {
            if (i >= times[j][0] && i < times[j][1]) cnt++;
            console.log(cnt, i)
        }
        if (cnt > max) max=cnt;
    }
    answer=max;
    return answer;
}

let arr=[[14, 18], [12, 15], [15, 20], [20, 30], [5, 14]];
console.log(solution(arr));
  1. 쌤 풀이 :
    해쉬테이블에 도착시간을 s, 귀가시간을 'e'에 저장. 오름차순으로 sort정렬한 후, for문을 돌려서 최대 동시간대 같이 있는 사람을 찾는다.
function solution(times){
    let answer=Number.MIN_SAFE_INTEGER;
    let T_line=[];
    for (let x of times) {
        T_line.push([x[0], 's']);
        T_line.push([x[1], 'e']);
    }
    T_line.sort((a, b)=>{
        if (a[0]===b[0]) return a[1].charCodeAt()-b[1].charCodeAt();
        else return a[0]-b[0];
    });
    let cnt=0;
    for (let x of T_line) {
        if (x[1]==='s') cnt++;
        else cnt--;
        answer=Math.max(answer, cnt);
    }

    return answer;
}

...사실 쌤 풀이가 이해가 안됨;
내가 한 풀이는 예외값 지정이 안 되서 다른 예제에서 false가 뜰 확률이 높긴 한데... 조금 더 공부해보는걸로!

profile
새로운 도전과 재미를 추구하는 프론트엔드 개발자

0개의 댓글