Programmers/Level 0

<22.10.26>프로그래머스 Level 0 문제 풀이 #03

mayberry 2022. 10. 26. 21:46

Programmers Level 0 문제 풀이 #03 - 2022-10-26

 

Programmers Level 0 문제 풀이 #03 - 2022-10-26

 

 

3-1. 약수 구하기

 

문제)

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

function solution(n) {
    // 22-10-26.
    // n 길이의 배열을 만든 뒤, filter를 이용하여 n에서 it을 나눈 나머지가 0인 배열들만 추출
    return Array.from({length:n}, (v,k) => k+1).filter(it => {return n%it === 0})
}

 

3-2. 중앙값 구하기

 

문제)

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

 

내가 작성한 답안)

function solution(array) {
    // 22-10-26
    // array를 오름차순 정렬 후 배열의 정중앙 인덱스의 값을 반환한다
    return array.sort((a,b) => {return a-b})[(array.length-1)/2];
}

 

3-3. 개미군단

 

문제)

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

function solution(hp) {
    // 22-10-26
    // hp에서 5을 나눈 몫과 나머지를 비구조화 할당으로 배치, 여기서 general은 가용 가능한 장군개미, others는 
    // 가용 가능할 것으로 추측되는 장군개미 이외의 개미들
    let [general, others] = [Math.floor(hp/5), Math.floor(hp%5)];
    // others에 3을 나눈 몫과 나머지를 비구조화 할당으로 배치, 여기서 strong은 가용 가능한 병정개미, others는
    // 가용 가능한 일개미의 수, 만약 없다면 자동으로 0을 배출
    let [strong, another] = [Math.floor(others/3), Math.floor(others%3)];
    return general+strong+another;
}

 

3-4. 점의 위치 구하기

 

문제)

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

function solution(dot) {
    // 22-10-26
    if (dot[0]*dot[1]>0 && dot[0] > 0) {
        return 1;
    }else if (dot[0]*dot[1]<0 && dot[0]<0) {
        return 2;
    }else if (dot[0]*dot[1]>0 && dot[0]<0) {
        return 3;
    }else {
        return 4;
    }
}

 

3-5. 세균 증식

 

문제)

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

function solution(n, t) {
    // 22-10-26
    // t 개수만큼의 배열을 생성한 후, reduce를 활용하여 배열 개수만큼 2를 곱한다
    return Array.from({length:t}, (v,k) => k+1).reduce((acc,cur) => acc *= 2, n)
}