ppotatoG


Back to all posts

체육복

Written by ppotatoG & Posted on November 28th, 2021

체육복

처음 제출한 답

처음 제출하고 정확도 30%라 기분 좋았다

function solution(n, lost, reserve) {
let has = n - lost.length; // 체육복을 갖고 있는 변수 has
let 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;
}

최근 보충한 내용

  1. 값 정렬
  2. lost, reserve에 서로 중복되는 값 삭제
  3. Lost값 중 val2 - val의 절대값이 1보다 작다 => 빌려줄 수 있다!!
  4. 3의 값을 Reserve에서 삭제
function solution(n, lost, reserve) {
// 1
lost.sort((a, b) => a - b);
reserve.sort((a, b) => a - b);
// 2
let Lost = lost.filter((val) => !reserve.includes(val));
let Reserve = reserve.filter((val) => !lost.includes(val));
return n - Lost.filter((val) => {
// 3
let extra = Reserve.find((val2) => Math.abs(val2 - val) <= 1);
if(!extra) return true;
// 4
Reserve = Reserve.filter((val2) => val2 !== extra);
}).length;
}

테스트 13, 18 : 정렬이 되지 않았을 때

테스트 5, 12 : 잃어버린 학생이 여유체육복이 있는 학생, 먼저 배열에서 삭제해줘야 함

테스트 7 : 답이 n보다 클 때

@leeeunbin/프로그래머스-체육복-JavaScript


Posted on November 28th, 2021