Back to all posts
체육복
Written by ppotatoG & Posted on November 28th, 2021
처음 제출한 답
처음 제출하고 정확도 30%라 기분 좋았다
function solution(n, lost, reserve) {let has = n - lost.length; // 체육복을 갖고 있는 변수 haslet arr = []; // 빈 배열for(let i = 0; i < lost.length; i++){// 빈 배열에 lost의 +-1값을 넣어주기arr.push(lost[i] - 1);arr.push(lost[i]);arr.push(lost[i] + 1);}for(let i = 0; i < reserve.length; i++){for(let k = 0; k < 3; k++){// 잃어버린 학생 기준으로, 앞 뒤 값이 있는지 확인if(reserve[i] === arr[ k + i *3]) {has++;break;}}}return has;}
두번째
첫번째에서 배열들을 정렬해주고,,
잃어버린 학생과, 여분이 있는 학생을 제거해준 후 구현
function solution(n, lost, reserve) {let has = n - lost.length;let arr = [];// 값 정렬lost.sort((a, b) => a - b);reserve.sort((a, b) => a - b);for(let i = 0; i < lost.length; i++){for(let k = 0; k < reserve.length; k++){if(lost[i] === reserve[k]) {// 잃어버린 학생 중, 여분 체육복을 가져온 학생이라면reserve.splice(k, 1);lost.splice(i, 1);has ++;i--;k--;break;}}}for(let i = 0; i < lost.length; i++){arr.push(lost[i] - 1);arr.push(lost[i] + 1);}if(lost.length > 0) {for(let i = 0; i < reserve.length; i++){for(let k = 0; k < arr.length; k++){if(reserve[i] === arr[k]) {has++;break;}}}}return has;}
마지막
중간에, 답이 n보다 크면 중복 멈추는 내용 추가!
function solution(n, lost, reserve) {let has = n - lost.length;let arr = [];lost.sort((a, b) => a - b);reserve.sort((a, b) => a - b);for(let i = 0; i < lost.length; i++){for(let k = 0; k < reserve.length; k++){if(lost[i] === reserve[k]) {reserve.splice(k, 1);lost.splice(i, 1);has ++;i--;k--;break;}}}for(let i = 0; i < lost.length; i++){arr.push(lost[i] - 1);arr.push(lost[i] + 1);}if(lost.length > 0) {for(let i = 0; i < reserve.length; i++){for(let k = 0; k < arr.length; k++){if(reserve[i] === arr[k]) {has++;break;}if(has >= n) break;// n보다 크면 멈춤}}}return has;}
최근 보충한 내용
- 값 정렬
lost
,reserve
에 서로 중복되는 값 삭제Lost
값 중val2 - val
의 절대값이 1보다 작다 => 빌려줄 수 있다!!- 3의 값을
Reserve
에서 삭제
function solution(n, lost, reserve) {// 1lost.sort((a, b) => a - b);reserve.sort((a, b) => a - b);// 2let Lost = lost.filter((val) => !reserve.includes(val));let Reserve = reserve.filter((val) => !lost.includes(val));return n - Lost.filter((val) => {// 3let extra = Reserve.find((val2) => Math.abs(val2 - val) <= 1);if(!extra) return true;// 4Reserve = Reserve.filter((val2) => val2 !== extra);}).length;}
테스트 13, 18 : 정렬이 되지 않았을 때
테스트 5, 12 : 잃어버린 학생이 여유체육복이 있는 학생, 먼저 배열에서 삭제해줘야 함
테스트 7 : 답이 n
보다 클 때