https://school.programmers.co.kr/learn/courses/30/lessons/258711

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

헐..어렵다..!!

function solution(edges) {
    var [dot,dounut,bar,eight]=[0,0,0,0];
    var graph =edges.reduce((map,key)=>{
        if(!map.has(key[0])){
            map.set(key[0],[1,0])
        }else{
           const [give,receive]=map.get(key[0]);
            map.set(key[0],[give+1,receive]);       
        }
        if(!map.has(key[1])){
            map.set(key[1],[0,1])
        }else{
            const [give,receive]=map.get(key[1]);
            map.set(key[1],[give,receive+1]);
        }
       
        
        return map;
    },new Map())
   
 
    
    for(let [key, value] of graph){
        const [give,receive]=value;
        
        if(give>1&&receive==0){
            dot = key; //정점 찾기 (정점은 give>=2, receive ==0)
        }
        else if(give==0&& receive>0)bar++; //막대그래프 찾기 (최상단의 막대그래프는 give==0, receive>0)
        
        else if(give>=2&& receive>=2)eight++;
    }
    
    dounut = graph.get(dot)[0]-eight-bar; //전체 그래프 개수: 정점과 이어진 선(give) 개수
    //전체 - 막대 - 8자그래프 = 도넛그래프 개수 
    
    return [dot,dounut,bar,eight];
}

 

그림을 잘 보고 그래프마다의 특성을 찾아내야 하는구만 

 

 

 

 

 

 

참고  : https://velog.io/@naro-kim/%EA%B7%B8%EB%9E%98%ED%94%84-2024-Kakao-winter-internship-%EB%8F%84%EB%84%9B%EA%B3%BC-%EB%A7%89%EB%8C%80-%EA%B7%B8%EB%9E%98%ED%94%84-Javascript

function solution(bandage, health, attacks) {
    var answer = 0;
    var success = 0;
    var now = health;
    var keep = 0;
    var last_attack = attacks[attacks.length-1][0];
    var time = bandage[0];
    var heal = bandage[1];
    var bonus = bandage[2];
    
    for(let i=1; i<=last_attack; i++){
       if(i == attacks[0][0]){
            now = now - attacks[0][1]
            attacks.shift();
            keep=0;
            console.log("attack",now)
           if(now<1){
               now = -1;
               break;
           }
       }
        else{
            if(now+heal>health)
                now = health;
            else now = now+heal;
            keep++;
            
            if(time==keep){
                keep=0;
                now +bonus < health? now = now + bonus : now = health;
            }
            
        }
       
        
    }
    
    
    return now;
}

삼항연산자 쓰면 심심찮게 오타나서 계속 틀리는데도 

깔끔해보여서 자꾸 쓰게된다 헷 

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

~.~

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

 

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

 

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

+ Recent posts