🌠 문제

사분면은 한 평면을 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 함수를 완성해주세요.

🌠 제한사항

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.

🌠 입출력 예

dot result
[2, 4] 1
[-7, 9] 2

🌠 입출력 예 설명

입출력 예 #1

  • dot이 [2, 4]로 x 좌표와 y 좌표 모두 양수이므로 제 1 사분면에 속합니다. 따라서 1을 return 합니다.

입출력 예 #2

  • dot이 [-7, 9]로 x 좌표가 음수, y 좌표가 양수이므로 제 2 사분면에 속합니다. 따라서 2를 return 합니다.

🧞 풀이

function solution(dot) {
    if (dot[0] > 0) {
        if (dot[1] > 0) {
            return 1;
        } else {
            return 4;
        }
    } else {
        if (dot[1] > 0) {
            return 2;
        } else {
            return 3;
        }
    }
}

🌠 문제

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ balls ≤ 30
  • 1 ≤ share ≤ 30
  • 구슬을 고르는 순서는 고려하지 않습니다.
  • share ≤ balls

🌠 입출력 예

balls share result
3 2 3
5 3 10

🌠 입출력 예 설명

입출력 예 #1

  • 서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다.

입출력 예 #2

  • 서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다.

서로 다른 n개 중 m개를 뽑는 경우의 수 공식


🧞 풀이

function solution(balls, share) {
    // 둘이 같은 경우는 1 리턴
    if (balls == share ) {
        return 1;
    }
    
    // 분자의 경우, n!과 m!이 약분되는 것을 고려
    let deno = 1;
    for (let i = balls; i > share; i --) {
        deno = deno * i;
    }
    
    // 분모의 경우, (n-m)!을 계산
    let nume = 1;
    for (let i = 1; i <= balls - share; i ++) {
        nume = nume * i;
    } 
    
    // 둘을 나눌 때, 경우의 수는 정수로 출력되어야 함
    return Math.round(deno / nume);
}

🌠 문제

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

🌠 제한사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

🌠 입출력 예

rsp result
"2" "0"
"205" "052"

🌠 입출력 예 설명

입출력 예 #1

  • "2"는 가위이므로 바위를 나타내는 "0"을 return 합니다.

입출력 예 #2

  • "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 “052”를 return합니다.

🧞 풀이

function solution(rsp) {
    // 배열로 변환
    const rsp_array = rsp.split("");
    // 배열의 각 요소가 가위, 바위, 보일 때, 바위, 보, 가위로 변환하여 다시 문자열로 합치기
    return rsp_array.map(e => e == 2 ? 0 : e == 0 ? 5 : 2).join("");
}

🌠 문제

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}

🌠 제한사항

  • 1 ≤ letter의 길이 ≤ 1,000
  • return값은 소문자입니다.
  • letter의 모스부호는 공백으로 나누어져 있습니다.
  • letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
  • 해독할 수 없는 편지는 주어지지 않습니다.
  • 편지의 시작과 끝에는 공백이 없습니다.

🌠 입출력 예

letter result
".... . .-.. .-.. ---" "hello"
".--. -.-- - .... --- -." "python"

🌠 입출력 예 설명

  • 입출력 예 #1
    .... = h
    . = e
    .-.. = l
    .-.. = l
    --- = o
    따라서 "hello"를 return 합니다.
  • 입출력 예 #2
    .--. = p
    -.-- = y
    - = t
    .... = h
    --- = o
    -. = n
    따라서 "python"을 return 합니다.
  • a ~ z에 해당하는 모스부호가 순서대로 담긴 배열입니다.
  • {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}

🧞 풀이

function solution(letter) {
    morse = { 
        '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
        '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
        '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
        '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
        '-.--':'y','--..':'z'
    };
    
    // 문자열 letter를 공백 기준으로 하나의 요소가 되는 배열로 변환
    const letter_array = letter.split(" ");
    
    // map으로 morse 객체의 value 값으로 각 요소를 바꾸고, 이를 공백없이 문자열로 합치기
    return letter_array.map(l => morse[l]).join("");
}

🌠 문제

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

🌠 제한사항

  • hp는 자연수입니다.
  • 0 ≤ hp ≤ 1000

🌠 입출력 예

hp result
23 5
24 6
999 201

🌠 입출력 예 설명

입출력 예 #1

  • hp가 23이므로, 장군개미 네마리와 병정개미 한마리로 사냥할 수 있습니다. 따라서 5를 return합니다.

입출력 예 #2

  • hp가 24이므로, 장군개미 네마리 병정개미 한마리 일개미 한마리로 사냥할 수 있습니다. 따라서 6을 return합니다.

입출력 예 #3

  • hp가 999이므로, 장군개미 199 마리 병정개미 한마리 일개미 한마리로 사냥할 수 있습니다. 따라서 201을 return합니다.

🧞 풀이

function solution(hp) {
    const a = parseInt(hp/5);
    let remain_a = hp % 5;
    const b = parseInt(remain_a/3);
    let remain_b = remain_a % 3;
    return a + b + remain_b;
}

🌠 문제

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ n ≤ 1,000,000

🌠 입출력 예

n result
20 6
100 9

🌠 입출력 예 설명

입출력 예 #1

  • n이 20 이므로 곱이 20인 순서쌍은 (1, 20), (2, 10), (4, 5), (5, 4), (10, 2), (20, 1) 이므로 6을 return합니다.

입출력 예 #2

  • n이 100 이므로 곱이 100인 순서쌍은 (1, 100), (2, 50), (4, 25), (5, 20), (10, 10), (20, 5), (25, 4), (50, 2), (100, 1) 이므로 9를 return합니다.

🧞 풀이

function solution(n) {
    // 정답 담기 위한 변수 선언
    let answer = 0;
    
    // x는 n의 제곱근의 정수 부분
    const x = parseInt(Math.sqrt(n));
    
    // 1부터 x까지 반복하면서 약수인지 확인
    // 약수일 경우, 항상 쌍이 있기 때문에 answer에 더하기 2
    for (let i = 1; i <= x; i++) {
        if (n % i == 0) {
            answer += 2;
        }
    }
    
    // 만약 Math.sqrt(n)이 정수면, 해당 경우는 Math.sqrt(n)을 약수로 가지는 것
    // 그렇기 때문에 -1
    if ( x == Math.sqrt(n) ) {
        answer -= 1;
    }
    
    // 정답 반환
    return answer;
}

🌠 문제

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 중복된 원소는 없습니다.
  • 1 ≤ emergency의 길이 ≤ 10
  • 1 ≤ emergency의 원소 ≤ 100

🌠 입출력 예

emergency result
[3, 76, 24] [3, 1, 2]
[1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100] [2, 4, 3, 5, 1]

🌠 입출력 예 설명

입출력 예 #1

  • emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.

입출력 예 #2

  • emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.

입출력 예 #3

  • emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.

🧞 풀이

function solution(emergency) {
    let answer = new Array(emergency.length);
    let sorted = emergency.slice().sort((a, b) => a - b);
    
    var i = sorted.length - 1;
    var e = 1;
    while (i >= 0) {
        answer[emergency.indexOf(sorted[i])] = e;
        i--;
        e++;
    }
    
    return answer;
}

🌠 문제

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • age는 자연수입니다.
  • age ≤ 1,000
  • PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.

🌠 입출력 예

age result
23 "cd"
51 "fb"
100 "baa"

🌠 입출력 예 설명

입출력 예 #1

  • age가 23이므로 "cd"를 return합니다.

입출력 예 #2

  • age가 51이므로 "fb"를 return합니다.

입출력 예 #3

  • age가 100이므로 "baa"를 return합니다.

🧞 풀이

function solution(age) {
    // 배열을 선언하고 해당 인덱스 값으로 962식 나이 return
    let letter_array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
    // age 값 문자열로 변환하여 각 자리수 나눠서 배열 원소로 할당
    let age_array = age.toString().split("");
    // map 함수 써서 요소 일괄 인덱스 배열 값으로 변경
    let answer = age_array.map(e => letter_array[e]);
    // 정답 문자열 형태로 출력
    return answer.join("");
}

🌠 문제

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

🌠 제한사항

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이

🌠 입출력 예

numbers                num1 num2 result
[1, 2, 3, 4, 5]             1       3      [2, 3, 4]
[1, 3, 5]                     1       2      [3, 5]

🌠 입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4, 5]의 1번째 인덱스 2부터 3번째 인덱스 4 까지 자른 [2, 3, 4]를 return 합니다.

입출력 예 #2

  • [1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.

🧞 풀이

function solution(numbers, num1, num2) {
    // slice 함수: 배열의 일부를 잘라 새로운 배열로 리턴
    // 인자는 시작 인덱스와 끝 인덱스를 받음
    return numbers.slice(num1, num2+1);
}

+ Recent posts