ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL-2024.04.13 - 코테연습 - 재택근무인원찾기(2).programmers
    > 기초/코테 연습 2024. 4. 14. 21:01

     

     

     

    URL:

    Programmers Lv.2

     

     

     

     

     

    푼 코드: 

    const solution = (num_teams, remote_tasks, office_tasks, employees) => {
        let officeTeamMap = new Map();
        let tempMap = new Map()
        let resultTeam = [];
    
        for (let i = 0; i < employees.length; i++) {
            let employee = employees[i];
            let split = employee.split(" ");
            let isWork = false;
            let teamNo = split[0];
            for (let j = 1; j < split.length; j++) {
                if(office_tasks.includes(split[j])) isWork = true;
            }
            const condition = officeTeamMap.has(teamNo)
            if(!isWork){
                // 일하러 가지 않아도 되는 경우
                if(!condition){
                    // 근데, team에 아무도 없으면 내가 가야됨
                    officeTeamMap.set(teamNo, employee)
                    tempMap.set(employee, i+1)
                } else {
                    // 팀에 누군가 있는 경우, 안가도됨
                    resultTeam.push(i+1)
                }
            } else {
                // 일하러 가는 상황
                if(condition){
                    // 누군가 회사에 출근한 경우, 누구가 원래 회사 출근해야되는지 체크
                    const previousEmployee =  officeTeamMap.get(teamNo)
                    let returnHome = true;
                    for (let k = 1; k < previousEmployee.split(" ").length; k++) {
                        if(office_tasks.includes(previousEmployee[k])) {
                            returnHome = false;
                            break;
                        }
                    }
                    if(returnHome){
                        // 기존 워커는 집에 가기
                        officeTeamMap.delete(teamNo);
                        resultTeam.push(tempMap.get(previousEmployee));
                    }
                }
                officeTeamMap.set(teamNo, employee)
                tempMap.set(employee, i+1)
            }
    
        }
        return resultTeam;
    };
    
    
    console.log("result:: ", solution(3, [ "development", "marketing", "hometask" ], [ "recruitment", "education", "officetask" ], [ "1 development hometask", "1 recruitment marketing", "2 hometask", "2 development marketing hometask", "3 marketing", "3 officetask", "3 development" ])); // [1,4,5,7]
    console.log("result:: ", solution(2, [ "design" ], [ "builiding", "supervise" ], [ "2 design", "1 supervise building design", "1 design", "2 design" ])); // [3,4]

     

    > 위의 코드를 푸니, 테스트 코드는 넘어갔지만, 대부분의 테스트에서 FAIL

     

     

     

     

     

     

    푼 코드 2: 

    const solution = (num_teams, remote_tasks, office_tasks, employees) => {
        let team = new Array(employees.length)
        let isOffice = new Array(employees.length)
        let teamExist = new Array(num_teams).fill(false)
    
    
        for( let i = 0; i < employees.length; i ++  ) {
            const splt = employees[i].split(" ")
            const dept = splt[0]
            const office = splt.filter((v,i) => i != 0)
                .map(v => office_tasks.includes(v))
                .reduce((p, n) => p || n, false)
            team[i] = dept
            isOffice[i] = office
        }
    
        let result = isOffice
            .map((v, i) => {
                if (!v) return i + 1
                else {
                    teamExist[team[i] - 1] = true
                    return -1;
                }
            })
            .filter(v => v != -1)
            .filter(v => {
                const teamGet = team[v - 1];
                const exist = teamExist[teamGet - 1]
                if( !exist ) {
                    teamExist[teamGet - 1] = true
                }
                return exist
            })
    
        return result
    }
    
    
    console.log("result:: ", solution(3, [ "development", "marketing", "hometask" ], [ "recruitment", "education", "officetask" ], [ "1 development hometask", "1 recruitment marketing", "2 hometask", "2 development marketing hometask", "3 marketing", "3 officetask", "3 development" ])); // [1,4,5,7]
    console.log("result:: ", solution(2, [ "design" ], [ "builiding", "supervise" ], [ "2 design", "1 supervise building design", "1 design", "2 design" ])); // [3,4]

     

     

    둘의 차이점은 크게 없고, new Map()를 쓴거만 있는데, 도대체 왜 첫번째 꺼는 FAIL 이였을까..?

     

     

     

     

    댓글

Designed by Tistory.