🌠 문제

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ my_string ≤ 110
  • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
  • 대문자와 소문자를 구분합니다.
  • 공백(" ")도 하나의 문자로 구분합니다.
  • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

🌠 입출력 예

my_string result
"people" "peol"
"We are the world" "We arthwold"

🌠 입출력 예 설명

입출력 예 #1

  • "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.

입출력 예 #2

  • "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.

🧞 풀이

function solution(my_string) {
    // 문자열 배열로 변환
    let array = my_string.split("");
    // 정답 담을 배열 선언
    let answer = [];
    // array에서 첫번째부터 하나씩 요소를 빼서,
    // answer 배열에 추가,
    // answer 배열에 중복값이 있을 경우, (indexOf, lastIndexOf 비교해서 파악)
    // answer 배열에서 다시 빼기
    while (array.length != 0) {
        let tmp = array.shift();
        answer.push(tmp);
        if (answer.indexOf(tmp) != answer.lastIndexOf(tmp)) {
            answer.pop();
        }
    }
    return answer.join("");
}

🌠 문제

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ strlist 원소의 길이 ≤ 100
    strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.

🌠 입출력 예

strlist result
["We", "are", "the", "world!"] [2, 3, 3, 6]
["I", "Love", "Programmers."] [1, 4, 12]

🌠 입출력 예 설명

입출력 예 #1

  • ["We", "are", "the", "world!"]의 각 원소의 길이인 [2, 3, 3, 6]을 return합니다.

입출력 예 #2

  • ["I", "Love", "Programmers."]의 각 원소의 길이인 [1, 4, 12]을 return합니다.

🧞 풀이

function solution(strlist) {
    let answer_array = [];
    while (strlist.length != 0) {
        answer_array.push(strlist.shift().length)
    }
    return answer_array;
}

🌠 문제

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

🌠 제한사항

  • 1 ≤ s의 길이 ≤ 200
  • -1,000 < s의 원소 중 숫자 < 1,000
  • s는 숫자, "Z", 공백으로 이루어져 있습니다.
  • s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
  • 연속된 공백은 주어지지 않습니다.
  • 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
  • s는 "Z"로 시작하지 않습니다.
  • s의 시작과 끝에는 공백이 없습니다.
  • "Z"가 연속해서 나오는 경우는 없습니다.

🌠 입출력 예

s result
"1 2 Z 3" 4
"10 20 30 40" 100
"10 Z 20 Z 1" 1
"10 Z 20 Z" 0
"-1 -2 -3 Z" -3

🌠 입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 10 + 20 + 30 + 40 = 100을 return 합니다.

입출력 예 #3

  • "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.

입출력 예 #4, #5

  • 설명 생략
  • ※ 공지 - 2022년 11월 30일 제한사항 및 테스트 케이스가 수정되었습니다.

🧞 풀이

function solution(s) {
    // 문자열 s를 공백 기준으로 나눠 요소로 만들어 배열 생성
    let array = s.split(" ");
    let answer_array = [];
    let answer = 0;
    
    // 새로 선언한 배열에 Z일 때는 기존의 원소를 빼고, 숫자이면 추가함
    while (array.length != 0) {
        let tmp = array.shift();
        if (tmp === "Z") {
            answer_array.pop();
        } else {
            answer_array.push(tmp);
        }
    };
    
    // 배열의 문자열로 된 요소들 모두 숫자형으로 변환
    let number_answer_array = answer_array.map(Number);

    // 배열의 값들 하나씩 빼서 answer에 더하기
    while (number_answer_array.length != 0) {
        answer += number_answer_array.shift();
    }
    
    // 정답 리턴
    return answer;
}

🌠 문제

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 2 ≤ n ≤ 10,000

🌠 입출력  예

n result
12 [2, 3]
17 [17]
420 [2, 3, 5, 7]

🌠 입출력 예 설명

입출력 예 #1

  • 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.

입출력 예 #2

  • 17은 소수입니다. 따라서 [17]을 return 해야 합니다.

입출력 예 #3

  • 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.

🧞 풀이

function solution(n) {
    // 정답을 담을 배열 선언
    let answer = [];
    // 소인수 분해, 약수 2부터 시작
    let i = 2;
    
    while (n != 1) {
        // 나눠 떨어지면 해당 수는 약수
        if (n % i == 0) {
            answer.push(i)
            // 해당 약수로 나눠 떨어질 때까지 반복
            while (n % i == 0) {
                n = n / i; 
            }
        }
        i ++;
    }
    return answer;
}

🌠 문제

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

🌠 입출력 예

my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16

🌠 입출력 예 설명

입출력 예 #1

  • "aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4 입니다. 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.

입출력 예 #2

  • "1a2b3c4d123Z"안의 한자리 자연수는 1, 2, 3, 4, 1, 2, 3 입니다. 따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.

유의사항

  • 연속된 숫자도 각각 한 자리 숫자로 취급합니다.

🧞 풀이

function solution(my_string) {
    let array = my_string.split("").filter(e => !isNaN(e)).map(Number);
    const result = array.reduce(function add(sum, a) {
        return sum + a;
    }, 0);
    return result;
}

🌠 문제

문자열 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];
}

+ Recent posts