🌠 문제

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

🌠 제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.

🌠 입출력 예

my_string result
"hi12392" [1, 2, 2, 3, 9]
"p2o4i8gj2" [2, 2, 4, 8]
"abcde0" [0]

🌠 입출력 예 설명

입출력 예 #1

  • "hi12392"에 있는 숫자 1, 2, 3, 9, 2를 오름차순 정렬한 [1, 2, 2, 3, 9]를 return 합니다.

입출력 예 #2

  • "p2o4i8gj2"에 있는 숫자 2, 4, 8, 2를 오름차순 정렬한 [2, 2, 4, 8]을 return 합니다.

입출력 예 #3

  • "abcde0"에 있는 숫자 0을 오름차순 정렬한 [0]을 return 합니다.

🧞 풀이

//  isNaN() 함수: 해당 요소가 숫자인지 아닌지 판별하는 함수

function solution(my_string) {
    // my_string을 쪼개서 배열로 만들고, 
    // 숫자일 때만 원소를 남기고, 
    // map(Number)을 통해, 문자열을 숫자 배열로 바꾼다.
    let array = my_string.split("").filter(e => !isNaN(e)).map(Number);
    
    // 오름차순 배열 리턴
    return array.sort((a, b) => (a - b));
}

🌠 문제

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

🌠 입출력 예

my_string result
"bus" "bs"
"nice to meet you" "nc t mt y"

🌠 입출력 예 설명

입출력 예 #1

  • "bus"에서 모음 u를 제거한 "bs"를 return합니다.

입출력 예 #2

  • "nice to meet you"에서 모음 i, o, e, u를 모두 제거한 "nc t mt y"를 return합니다.

🧞 풀이

function solution(my_string) {
    let array = my_string.split("").filter(e => e === "u" ? "" : e === "a" ? "" : e === "e"? "" : e === "o" ? "": e === "i" ? "": e);
    return array.join("");
}

🌠 문제

i 팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

i! ≤ n

🌠 제한사항

  • 0 < n ≤ 3,628,800

🌠 입출력 예

n result
3628800 10
7 3

🌠 입출력 예 설명

입출력 예 #1

  • 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.

입출력 예 #2

  • 3! = 6, 4! = 24입니다. n이 7이므로, 7 이하의 최대 팩토리얼인 3을 return 합니다.

🧞 풀이

function solution(n) {
    let i = 1;
    let answer = 1;
    
    // answer에는 팩토리얼의 값을 할당, 조건이 충족될 때까지 1씩 증가
    while (i < n) {
        answer ++;
        i = i * answer;
    }
    
    // 곱한 값이 n보다 커졌을 때는, 그 전 팩토리얼이 값이니 answer - 1
    if (i > n) {
        return answer - 1;
    } else {
        return answer;
    }
}

🌠 문제

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100

🌠 입출력 예

numbers result
[1, 2, 3, 4, 5] 20
[0, 31, 24, 10, 1, 9] 744

🌠 입출력 예 설명

입출력 예 #1

  • 두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

입출력 예 #2

  • 두 수의 곱중 최댓값은 31 * 24 = 744 입니다.

🧞 풀이

function solution(numbers) {
    // 내림차순 정렬
    numbers.sort((a, b) => (b - a));
    // 가장 큰 값 두 개 곱하기
    return numbers[0] * numbers[1];
}

🌠 문제

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ n ≤ 100

🌠 입출력 예

n result
10 5
15 8

🌠 입출력 예 설명

입출력 예 #1

  • 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

입출력 예 #2

  • 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

🧞 풀이

function solution(n) {
    // 합성수를 찾는다는 것은 곧 소수를 찾아서 제외하는 것이라 봐도 된다.
    // 소수를 찾으려면? 다양한 방법이 있지만 에라토스테네스의 체를 써보자.
    
    // 길이가 n인 배열 선언 
    let arr = new Array(n).fill(0);
    
    // 2부터 시작하여 특정 수의 배수에 해당하는 수를 모두 지운다.
    for (let i = 2; i <= n; i++) {
        // 이미 지워진 수라면 건너뛴다.
        if(arr[i]==-1) continue;
        
        // 배수부터 출발하여, 가능한 모든 숫자를 지운다.
        for (let j = 2*i; j<=n; j+=i) {
            arr[j] = -1;
        }
    }
    
    // 합성수의 갯수는 -1을 값으로 가지는 원소의 갯수랑 동일하다.
    return arr.filter(e => e == -1).length;
}

🌠 문제

머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • box의 길이는 3입니다.
  • box[0] = 상자의 가로 길이
  • box[1] = 상자의 세로 길이
  • box[2] = 상자의 높이 길이
  • 1 ≤ box의 원소 ≤ 100
  • 1 ≤ n ≤ 50
  • n ≤ box의 원소
  • 주사위는 상자와 평행하게 넣습니다.

🌠 입출력 예

box n result
[1, 1, 1] 1 1
[10, 8, 6] 3 12

🌠 입출력 예 설명

입출력 예 #1

  • 상자의 크기가 가로 1, 세로 1, 높이 1이므로 모서리의 길이가 1인 주사위는 1개 들어갈 수 있습니다.

입출력 예 #2

  • 상자의 크기가 가로 10, 세로 8, 높이 6이므로 모서리의 길이가 3인 주사위는 12개 들어갈 수 있습니다.

🧞 풀이

function solution(box, n) {
    const a = parseInt(box[0] / n); 
    const b = parseInt(box[1] / n); 
    const c = parseInt(box[2] / n); 
    return a * b * c;
}

🌠 문제

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

🌠 입출력 예

numbers direction result
[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]

🌠 입출력 예 설명

입출력 예 #1

  • numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.

입출력 예 #2

  • numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.

🧞 풀이

function solution(numbers, direction) {
    if (direction === "right") {
        numbers.unshift(numbers.pop());
    } else {
        numbers.push(numbers.shift());
    }
    return numbers;
}

🌠 문제

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

🌠 제한사항

  • 2 < numbers의 길이 < 100
  • 0 < k < 1,000
  • numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
  • numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

🌠 입출력 예

numbers k result
[1, 2, 3, 4] 2 3
[1, 2, 3, 4, 5, 6] 5 3
[1, 2, 3] 3 2

🌠 입출력 예 설명

입출력 예 #1

  • 1번은 첫 번째로 3번에게 공을 던집니다.
  • 3번은 두 번째로 1번에게 공을 던집니다.

입출력 예 #2

  • 1번은 첫 번째로 3번에게 공을 던집니다.
  • 3번은 두 번째로 5번에게 공을 던집니다.
  • 5번은 세 번째로 1번에게 공을 던집니다.
  • 1번은 네 번째로 3번에게 공을 던집니다.
  • 3번은 다섯 번째로 5번에게 공을 던집니다.

입출력 예 #3

  • 1번은 첫 번째로 3번에게 공을 던집니다.
  • 3번은 두 번째로 2번에게 공을 던집니다.
  • 2번은 세 번째로 1번에게 공을 던집니다.
  • ※ 공지 - 2023년 1월 25일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.

🧞 풀이

function solution(numbers, k) {
    // k가 1이 되기 전까지 한 사람 건너뛰니까 
    // 두 번 shift()한 걸 뒤에 push()
    while (k != 1) {
        numbers.push(numbers.shift());
        numbers.push(numbers.shift());
        k --;
    }
    return numbers[0];
}

🌠 문제

정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

num_list n result
[1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]

🌠 제한사항

  • num_list의 길이는 n의 배 수개입니다.
  • 0 ≤ num_list의 길이 ≤ 150
  • 2 ≤ n < num_list의 길이

🌠 입출력 예

num_list n result
[1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]
[100, 95, 2, 4, 5, 6, 18, 33, 948] 3 [[100, 95, 2], [4, 5, 6], [18, 33, 948]]

🌠 입출력 예 설명

입출력 예 #1

  • num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 2 * 4 배열로 변경한 [[1, 2], [3, 4], [5, 6], [7, 8]] 을 return합니다.

입출력 예 #2

  • num_list가 [100, 95, 2, 4, 5, 6, 18, 33, 948] 로 길이가 9이고 n이 3이므로 3 * 3 배열로 변경한 [[100, 95, 2], [4, 5, 6], [18, 33, 948]] 을 return합니다.

🧞 풀이

function solution(num_list, n) {
    // 정답 담을 배열 선언
    let answer = [];
    
    // 정답 배열에 넣을 각각의 배열을 만들어 줄 임시 변수 선언
    let tmp_array = [];
    
    // num_list에서 하나씩 shift()해서 임시 배열에 할당
    while (num_list.length != 0) {
        for (let i = 1; i <= n; i++) {
            tmp_array.push(num_list.shift());
        }
        answer.push(tmp_array);
        tmp_array = [];
    }
    
    // 정답 리턴
    return answer;
}

+ Recent posts