ACM준비/Programmers

호텔 방 배정

조규현15 2022. 12. 3. 22:03
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

room 안에 배정된 인원 수가 1 명이므로, has 검사만으로도 충분하다.

요청받은 방 번호가 invalid 하다면, 그 다음으로 큰 번호의 방이 할당되어야 하는데,

iter 를 돌리다보면 O(n) 이 발생하고, 결국 O(n*2) 이 되므로 indexing map 을 두어 접근했다.

 

방을 찾고, 다음에 요청되는 경우 할당 가능한 방을 찾아 이전까지 순회했던 방들의 indxing 도 같이 update 했다.

 

마지막 테스트가 시간초과로 실패했는데, 다른 자료를 찾아보니 js 에서 Object 와 Map 의 퍼포먼스가 크다고 들어

Map 으로 변경하니 해결됐다. 퍼포먼스가 중요한 문제에서는 Map 을 적극 사용하도록 하자.

function solution(k, room_number) {

    var idx_room = new Map();

    function visit(i) {
        var update_list = [i];

        var j = i;
        while (idx_room.has(j)) {
            j = idx_room.get(j);
            update_list.push(j);
        } 
        // find next
        var k = j+1;
        while (idx_room.has(k)) {
            k = idx_room.get(k);
        }
        // update idx
        update_list.forEach(l => {
            idx_room.set(l, k);
        });

        return j;
    }

    return room_number.map(i => visit(i));
}

 

반응형

'ACM준비 > Programmers' 카테고리의 다른 글

개인정보 수집 유효기간  (0) 2023.05.10
올바른 괄호의 갯수  (0) 2023.01.09
쿠키 구입  (0) 2023.01.09
자동완성  (0) 2022.12.12
무지의 먹방 라이브  (0) 2022.12.12