🌠 문제

  • 군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
  • 문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ cipher의 길이 ≤ 1,000
  • 1 ≤ code ≤ cipher의 길이
  • cipher는 소문자와 공백으로만 구성되어 있습니다.
  • 공백도 하나의 문자로 취급합니다.

🌠 입출력 예

cipher code result
"dfjardstddetckdaccccdegk" 4 "attack"
"pfqallllabwaoclk" 2 "fallback"

🌠 입출력 예 설명

입출력 예 #1

  • "dfjardstddetckdaccccdegk" 의 4번째, 8번째, 12번째, 16번째, 20번째, 24번째 글자를 합친 "attack"을 return합니다.

입출력 예 #2

  • "pfqallllabwaoclk" 의 2번째, 4번째, 6번째, 8번째, 10번째, 12번째, 14번째, 16번째 글자를 합친 "fallback"을 return합니다.

🧞 풀이

function solution(cipher, code) {
    let answer = [];
    for (let i = code-1; i < cipher.length; i += code) {
        answer.push(cipher[i]);
    }
    return answer.join('');
}

🌠 문제

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

🌠 제한사항

  • 1 ≤ order ≤ 1,000,000

🌠 입출력 예

order result
3 1
29423 2

🌠 입출력 예 설명

입출력 예 #1

  • 3은 3이 1개 있으므로 1을 출력합니다.

입출력 예 #2

  • 29423은 3이 1개, 9가 1개 있으므로 2를 출력합니다.

※ 공지 - 2023년 03월 24일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.


🧞 풀이

function solution(order) {
    let array = order.toString().split("");
    let answer = 0;
    while (array.length != 0) {
        let temp = array.shift();
        if (temp == '3' || temp == '6' || temp == '9') {
            answer ++;
        }
    }
    return answer;
}

🌠 문제

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

🌠 입출력 예

array n result
[3, 10, 28] 20 28
[10, 11, 12] 13 12

🌠 입출력 예 설명

입출력 예 #1

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

※ 공지 - 2023년 3월 29일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.


🧞 풀이

function solution(array, n) {
    array.push(n);
    array.sort((a, b) => a - b);
    let x = array.indexOf(n);
    if (x != 0 && x != array.length - 1) {
        if (array[x] - array[x-1] > array[x+1] - array[x]) {
            return array[x+1];
        } else {
            return array[x-1];
        }
    } else if (x == 0) {
        return array[x+1];
    } else {
        return array[x-1];
    }
}

🌠 문제

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수

다면 2를 return하도록 solution 함수를 완성해주세요.

🌠 제한사항

  • sides의 원소는 자연수입니다.
    sides의 길이는 3입니다.
    1 ≤ sides의 원소 ≤ 1,000

🌠 입출력 예

sides result
[1, 2, 3] 2
[3, 6, 2] 2
[199, 72, 222] 1

🌠 입출력 예 설명

입출력 예 #1

  • 가장 큰 변인 3이 나머지 두 변의 합 3과 같으므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #2

  • 가장 큰 변인 6이 나머지 두 변의 합 5보다 크므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #3

  • 가장 큰 변인 222가 나머지 두 변의 합 271보다 작으므로 삼각형을 완성할 수 있습니다. 따라서 1을 return합니다.

🧞 풀이

function solution(sides) {
    sides.sort((a, b) => a - b);
    if (sides[0] + sides[1] > sides[2]) {
        return 1;
    } else {
        return 2;
    }
}

🌠 문제

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

+ Recent posts