-
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 이였을까..?
'> 기초 > 코테 연습' 카테고리의 다른 글
TIL-2024.06.18 - CodingTest - 최소공배수 (feat.programmers) (0) 2024.06.18 TIL-2024.04.15 - 코테연습 - 추천 제품(2).programmers (0) 2024.04.15 TIL-2024.04.10 - 코테연습 - kakao -키패드 누르기(1).programmers (0) 2024.04.10 TIL-2024.04.09 - 코테연습 - 기사단원의 무기(1).programmers (0) 2024.04.09 TIL-2024.04.08 - 코테연습 - 붕대감기(1).programmers (0) 2024.04.08