728x90
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를 계속 사용했더니 시간초과가 발생해서 

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

728x90
function solution(numbers, k) {
    
    var turn =1
    var len =numbers.length
    
    for(i=1; i<k; i++){
        if(turn+2<=len)turn=turn+2;
        else turn=turn+2-len
        console.log(turn)
    }
    return turn;
}

~.~

728x90
function solution(left, right) {
    var answer = 0;
    
    for (i = left; i<=right; i++){
        var factors = 0;
        for(j=1; j<=i; j++){
            if(i%j ==0)
                factors++;
        }
        factors%2===0?answer=answer+i : answer=answer-i;
    }
    return answer;
}

 

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

 

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

728x90

 

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;
 }

헤헷 간단한문제

728x90
function solution(numbers, target) {
    var answer = 0;
    dfs(0,0);
    
    function dfs(idx,sum){
        if(idx==numbers.length){
            if(sum==target){
                answer++;
            }
            return;
        }
        
        dfs(idx+1,sum+numbers[idx]);
        dfs(idx+1,sum-numbers[idx]);
      
    }
    return answer;
}

 

자료구조 다 까먹어서 완전 감자상태다 ............ 공부 다시 해야지 

728x90
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을 사용해 배열로 만들어서 해결했다

728x90
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;
}

 

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

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

문제를 잘 읽자 !!

728x90

+ Recent posts