개발 이모저모/프로그래머스 알고리즘

[Algorithm] 프로그래머스 레벨[0] 풀이 - (Javascript)(8)

creativeDeveloper! 2023. 4. 8. 12:50
728x90

■ 개미 군단

 

  • 우선 최소한의 병력을 구성하기 위해선 일개미의 공격력은 도움이 되지 않는다.
  • 그렇기때문에 장군개미와 병정개미의 공격력만으로 최소한의 병력을 구성하기로 한다.
  • 입출력 예시를 보면 23(hp) = 5(장군개미 사냥력)*4 + 3(병정개미 사냥력)*1로 이루어져있다.
  • 위 예시를 통해 장군개미수는 Math.floor함수를 이용해 정수로 구할 수 있다.
  • 그리고 매개변수로 주어진 사냥감의 체력 hp를 5로 나눈 나머지를 장군개미로 처리할 체력으로 계산할 수 있다.
  • 병정개미도 장군개미의 로직을 똑같이 적용하면 된다.
  • 그 후에 반환할때는 일개미로 처리할 체력 hp까지 합산해서 반환하면 된다.

■ 점의 위치 구하기

    • 맨 처음 아래 코드대로 실행한 결과 return 값 2,3에서 제대로 반환하지 못했다.
    • 그래서 다시 처음부터 생각해보기로했다. 
    • 이중 for문을 굳이 사용하지 않아도 실행 할 수 있는 방법..!
function solution(dot) {
//    결과값은 0으로 초기화
    var answer = 0;
//     (x,y)를 담은 정수 배열 dot
//     dot.length = 2;
//     dot.length의 중복
   var length =  dot.length;
    for(let i=0; i< length; i++){
//     dot[0] = x좌표, dot[1] = y좌표일때, => (dot[0],dot[1]);
     for(let j =0; j < length; j++) {
          if(dot[i] > 0 && dot[j] >0){
            answer=1;
        }else if(dot[i] < 0 && dot[j] >0){
             answer=2;
        
        }else if(dot[i] < 0 && dot[j] < 0){
             answer=3;
           
        }else if(dot[i] > 0 && dot[j] < 0){
             answer=4;   
        }
     }
   }
    return answer;
}
  • 맨 처음부터 생각해보면, dot.length는 길이가 항상 2이기 때문에  굳이 반복문을 사용하지 않아도 된다.
  • x,y좌표값은 dot[0]과 dot[1]로 고정되어 있다.
  • 그 후에 각각의 사분면에 대한 경우의 수를 나눌 수 있다. => if-else문으로
function solution(dot) {
//    결과값은 0으로 초기화
    var answer = 0;
//  x,y좌표는 값이 정해져있다. => dot.length의 길이가 항상 2이기 때문에
    var x = dot[0];
    var y = dot[1];
//    if-else 문 사용해서 경우의 수 나누기
         if(x > 0 && y >0){
            answer=1;
        }else if(x < 0 && y >0){
             answer=2;
        
        }else if(x < 0 && y < 0){
             answer=3;
           
        }else if(x > 0 && y< 0){
             answer=4;
         
        }
    return answer;
}

■ 2차원으로 만들기

 

  • 이 문제는 이차원 배열에 관한 문제인것 같지만, 꼭 자바스크립트의 이차원배열에대해 알지 못해도 풀수 있다.
  • num_list 배열을 n개씩 slice한 값들을 모아서 새로운 배열 slices에 반환해 줄 것이다.
  • 그래서 우선은 slices 변수를 빈배열로 초기화 시킨다.
  • num_list의 길이만큼 반복문을 돌린다. 
  • 이때 중요한 점은 i의 값을 i += n 만큼 증가 시키는데, => i = i+n과 같은 의미이다.
  • 그리고 slices배열에 slice 메서드를 사용해서 i에서 i+n까지의 배열을 반환한다.
  • 최종적으로 slices에 모인 배열들을 반환해준다.
  • 다른분들이 푼 방식중에 엄청 간단한 방식이 있었다...
  • slice메서드는 원본배열을 바꾸지 않는다는것에 비해, splice 메서드를 사용하면 기존 요소를 삭제하거나 추가해서
  • 배열을 변경한다.
function solution(num_list, n) {
    var answer = [];

    while(num_list.length) {
        answer.push(num_list.splice(0,n));
    }

    return answer;
}

■ 공 던지기

 

  • numbers가 1부터 시작하기 때문에  => k-1 
  • numbers의 길이로 나눈 나머지를 인덱스로 해서 반환해주었다.

 

728x90