function solution(n, lost, reserve) {
    var answer=0;
 
    var lostS = lost.sort((a,b)=>a-b).filter((l)=>!reserve.includes(l));
    var reserveS =reserve.sort((a,b)=>a-b).filter((r)=>!lost.includes(r));
    var cannotReserve = lost.filter((l)=>reserve.includes(l)); //여벌의체육복을 분실한 학생
    
    answer =n - (lost.length - cannotReserve.length);
    
    lostS.forEach((l)=>{
       var canReserve = reserveS.filter((c)=>c-1==l||c+1==l).sort((a,b)=>a-b);
       if(canReserve.length>0){
           reserveS=reserveS.filter((r)=>r!==canReserve[0]);
           answer++;
       }
   
    })

    
    return answer;
}

 

전체 학생 수에서 분실한 학생 수를 뺄 때 

여벌의 체육복을 분실한 학생의 경우는 제외해야하는걸 몇번이나 틀리고서야 알았다 

문제를 잘 읽자 !!

function solution(new_id) {
var answer = new_id.toLowerCase()
                    .replace(/[^a-z0-9._-]/gm,"")//소문자,숫자,._- 외에 제거 
                    .replace(/[.]+/gm, '.')//.이 1개이상일때 1개로 replace
                    .replace(/^[.]/,"")//.이 처음에 올때 제거
                    .replace(/[.]$/gm,"")//.이 마지막에 올때 제거
                    .replace(/^$/gm,"a")//빈 문자열일때 a 대입 
                    .slice(0,15) //길이 15이하로 slice
                    .replace(/^[.]/,"")//slice 후에 .으로 시작하면 제거
                    .replace(/[.]$/gm,"")//slice 후에 .으로 끝나면 제거  
             
  const getTree = (id)=>id.length==2 ?id+id[1]: id.length==1?id+id[0]+id[0] : id 
  //길이가 1 또는 2일때 3이 되도록 a 추가 
    
  return answer===""?"aaa": getTree(answer);
}

문제 자체는 어렵지 않은데 정규식을 잘 알아야만 풀 수 있는 문제였다

 

정규식 공부하기 좋은 문제군 ㅎㅎ  

 

.이 2개 이상일때 무조건 1개로 만들어야하는데 3개 이상인 경우도 있다는 것을 고려하지않아 

문제를 해결하는데 오래 걸렸다 

 

 

function solution(today, terms, privacies) {
  
   var answer = [];
   const  trimToday =new Date(today)


    privacies.forEach((p,index)=>{
       var now = new Date(p.slice(0,p.length-2))
       var term = Number(terms.find((t)=>t[0]===p.slice(-1)).split(" ")[1])
       var month = now.getMonth()
       
       now.setMonth(month+term)
      
       if(now<=trimToday){
              answer.push(index+1);
           }
        
       
  
})
    
    return answer;
}

 

뭔가 지저분한 방식으로 풀었는데

나중에 다시 풀어봐야겠다 

 

.slice() 말고 split을 쓰면 훨씬 간단하게 해결할 수 있었을텐데 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

 

구조 분해 할당 - JavaScript | MDN

구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.

developer.mozilla.org

이거 참고해서 공부를 좀 해야겠다 

 

 

 

요일

const today = new Date();
const day = today.getDay();
// 일(0)~토(6)순으로 화요일의경우 2

 

const today = new Date();
const date = today.getDate();

 

const today = new Date();
const month = today.getMonth();
// 월의 경우 실제 월보다 -1된 값을 리턴한다 
//ex) 1월의 경우 0, 10월의경우 9를 리턴함. 31일 여부를 체크할 때 등 주의!!

 

연도

const today = new Date();
const day = today.getFullYear();
// getYear는 웹 표준에서 사라졌으므로 getFullYear사용

 

 

 

git mv 를 사용해서 폴더명을 바꾸는 중 오류가 발생했다.

 

bash 터미널에서 rename 하려는 폴더의 상위 폴더로 이동한 후 

git mv PreviousName NewName 을 입력했더니 

Rename from 'src/상위폴더../PreviousName' to 'src/상위폴더../NewName' failed. Should I try again? (y/n)

 

이런 오류가 발생한 것이다. 

y를 눌러도 계속 같은 메시지가 출력되어 해결법을 찾다가 

 

 

vscode 상단의 파일 > 폴더열기 >바꾸려는 폴더의 상위 폴더로 이동 한 뒤 

 

다시 git mv를 시도했더니 이름이 바로 바뀌었다!!! 

터미널에서 상위 폴더로 이동하는게 아니라 탐색기에서 이동해야 하는 거였다... 

 

오전내내 이 문제로 머리를 싸맸는데 이렇게 간단하게 해결되다니 !

 

 

그리고 만약

소문자 > 대문자로 변경할 때는 

 

testName > Testname 으로 바로 변경하지 말고

 

git mv testName testName_fix  //임시 이름은 아무거나 상관없음

 

한 다음

git mv testName_fix Testname

 

 

으로 바꿔주면 된다 .

 

 

주의할 점! 

git은 기본적으로 대소문자를 구분하지 않고 test , Test 두 개의 폴더 이름이 달라도

안에 들어있는 내용이 같다면 같은 폴더로 인식하는데,

 

git config core.ignorecase false

 

위 명령어를 사용해서 대소문자를 구분할 시 

혼자 작업하는 레포지토리라면 상관이 없겠지만,

 

다른사람과 동시 작업하는 경우엔

리모트에 

 

test/ 폴더와

Test/ 폴더가 각각 생성되어 충돌이 발생할 수도 있다 < 내 경험임 🥺

 

그러니 귀찮더라도 

다른 이름으로 먼저 바꿔준 다음, 대소문자 변경을 하도록 하자! 

+ Recent posts