function solution(friends, gifts) {
    var answer = 0;
    var score = new Map();
    var log = new Map();
    
    //hash 
    for(i=0; i<friends.length;i++){
        var name = friends[i]
        score.set(name, gifts.filter((g)=>g.split(" ")[0]===name).length - gifts.filter((g)=>g.split(" ")[1]===name).length)
        log.set(name,gifts.filter(g=>g.split(" ")[0]==name).map((i)=>i.split(" ")[1]))
    }
    //hash 

    for(i=0; i<friends.length; i++){
      var name = friends[i]; 
      var numOfGift = 0;
        
      for(j = 0; j<friends.length; j++){
         
          var receiver = friends[j] 
          
          var receive = log.get(receiver).filter((f)=>f==name).length;
          var give = log.get(name).filter((f)=>f==receiver).length;
            
              if(give>receive) numOfGift++;

              else if(give===receive){
              
                  if(score.get(name)>score.get(receiver)) numOfGift++; 
            }
       
         
          if(numOfGift>answer)
              answer=numOfGift;
       
      }
        
    }
     return answer;
}

 

filter를 계속 사용했더니 시간초과가 발생해서 

해시맵을 사용해서 해결했다! 진작쓸걸 ㅎ .. 

function solution(x) { 
    
    var number = x.toString().split("").reduce((a,b)=>Number(a)+Number(b));
    
    return x % number===0? true:false;
}

 

배열로 만든 뒤 reduce를 사용했다 

 

function solution(arr){
    var stack =[]
    
    arr.forEach((a,idx)=>{
       if(stack.length==0)stack.push(a);
       else if(stack[stack.length-1]!==a)stack.push(a)
     }
   )   
    
    
    return stack;
 }

헤헷 간단한문제

function solution(s) {
    var cnt = 0;
    var first = 0
    var diff =0
    var firstChar = s[0]
    s.split('').forEach((ch,index)=>{
        if(ch==firstChar){ 
           first++;
        }
        else diff++;
        if(diff===first){
            diff=0;
            first=0;
            cnt++;
            firstChar=s[index+1]
        }
        if(diff!==first&&s.length-1===index) 
            cnt++;
    })
    return cnt;
}

 

 

문자열을 split을 사용해 배열로 만들어서 해결했다

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

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

 

 

 

+ Recent posts