“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
O,X 퀴즈
문제설명
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
- 1 ≤ quiz의 길이 ≤ 10
- X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
- X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
- -10,000 ≤ X, Y ≤ 10,000
- -20,000 ≤ Z ≤ 20,000
- [연산자]는 + 와 - 중 하나입니다.
입출력예
quiz | result |
["3-4=-3","5+6=11"] | ["X", "O"] |
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"] | ["O", "O", "X", "O"] |
입출력예설명
- 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O" 입니다. 따라서 ["X", "O"]를 return합니다.
- 19 - 6 = 13 은 옳은 수식이므로 "O", 5 + 66 = 71 은 옳은 수식이므로 "O", 5 - 15 = 63 은 틀린 수식이므로 "X", 3 - 1 = 2는 옳은 수식이므로 "O" 따라서 ["O", "O", "X", "O"]를 return합니다.
출력
function solution(quiz) {
var answer = [];
for (var i = 0; i < quiz.length; i++) {
var equation = quiz[i].split(" ");
var x = parseInt(equation[0]);
var operator = equation[1];
var y = parseInt(equation[2]);
var z = parseInt(equation[4]);
var result;
if (operator === "+") {
result = x + y;
} else if (operator === "-") {
result = x - y;
}
if (result === z) {
answer.push("O");
} else {
answer.push("X");
}
}
return answer;
}
solution 함수는 quiz라는 매개변수를 받습니다. 이 quiz는 문자열 배열입니다. 각 문자열은 하나의 수식을 나타냅니다.
함수 내부에서는 반복문을 사용하여 quiz 배열을 순회합니다. 각 수식은 equation 변수에 할당됩니다.
equation을 공백을 기준으로 분할하여 각각의 값을 추출합니다. 첫 번째 값은 x, 두 번째 값은 operator, 세 번째 값은 y, 다섯 번째 값은 z에 각각 할당됩니다.
x, y, z는 문자열 형태이므로 parseInt 함수를 사용하여 정수로 변환합니다.
수식의 연산 결과를 저장할 변수 result를 선언합니다. 연산자가 '+'인 경우 x + y, 연산자가 '-'인 경우 x - y를 계산하여 result에 저장합니다.
result와 z를 비교하여 동일하면 수식이 옳은 것으로 판단하고, 'O'를 answer 배열에 추가합니다. 그렇지 않으면 수식이 틀린 것으로 판단하고, 'X'를 answer 배열에 추가합니다.
반복문이 모든 수식을 처리하고 난 후, answer 배열을 반환합니다.
7의 개수
문제설명
머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 0 ≤ array의 원소 ≤ 100,000
입출력예
array | result |
[7,77,17] | 4 |
[10,29] | 0 |
입출력예설명
- [7, 77, 17]에는 7이 4개 있으므로 4를 return 합니다.
- [10, 29]에는 7이 없으므로 0을 return 합니다.
출력
function solution(array) {
var count = 0;
for (var i = 0; i < array.length; i++) {
var num = array[i].toString();
for (var j = 0; j < num.length; j++) {
if (num[j] === "7") {
count++;
}
}
}
return count;
}
solution 함수는 array라는 매개변수를 받습니다. 이 array는 정수 배열입니다.
변수 count를 선언하고 초기값을 0으로 설정합니다. 이 변수는 숫자 7의 개수를 세기 위해 사용됩니다.
반복문을 사용하여 array 배열을 순회합니다. 반복문의 인덱스 변수로 i를 사용합니다.
배열의 각 원소인 array[i]를 문자열로 변환하기 위해 toString() 메서드를 사용합니다. 변환된 문자열을 num 변수에 저장합니다.
num 문자열을 다시 반복문을 사용하여 순회합니다. 반복문의 인덱스 변수로 j를 사용합니다.
num의 각 문자 num[j]가 문자열 "7"과 동일한지 확인합니다. 동일하다면 숫자 7이므로 count 변수를 1 증가시킵니다.
반복문이 종료되면 배열의 다음 원소로 넘어가고, 다음 원소에 대해 위의 과정을 반복합니다.
모든 원소에 대해 순회가 완료되면 최종적인 count 값을 반환합니다.
잘라서 배열로 저장하기
문제 설명
문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_str의 길이 ≤ 100
- 1 ≤ n ≤ my_str의 길이
- my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
입출력예
my_str | n | result |
"abc1Addfggg4556b" | 6 | ["abc1Ad", "dfggg4", "556b"] |
"abcdef123" | 3 | ["abc", "def", "123"] |
입출력예설명
- "abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.
- "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.
유의사항
- 입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.
출력
function solution(my_str, n) {
var result = [];
for (var i = 0; i < my_str.length; i += n) {
var slicedStr = my_str.slice(i, i + n);
result.push(slicedStr);
}
return result;
}
solution 함수는 my_str와 n이라는 매개변수를 받습니다. my_str은 문자열이고, n은 자르고자 하는 길이입니다.
빈 배열 result를 선언합니다. 이 배열은 잘라진 문자열을 저장할 용도로 사용됩니다.
반복문을 사용하여 my_str 문자열을 순회합니다. 반복문의 인덱스 변수로 i를 사용합니다. i는 n만큼씩 증가합니다.
my_str에서 i부터 i + n까지의 부분 문자열을 추출하여 slicedStr 변수에 저장합니다. 이를 위해 slice 메서드를 사용합니다.
추출한 부분 문자열 slicedStr을 result 배열에 추가합니다. 이를 위해 push 메서드를 사용합니다.
반복문이 모든 문자열을 처리하고 난 후, 최종적인 result 배열을 반환합니다.
외계어 사전
문제설명
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
- spell과 dic의 원소는 알파벳 소문자로만 이루어져있습니다.
- 2 ≤ spell의 크기 ≤ 10
- spell의 원소의 길이는 1입니다.
- 1 ≤ dic의 크기 ≤ 10
- 1 ≤ dic의 원소의 길이 ≤ 10
- spell의 원소를 모두 사용해 단어를 만들어야 합니다.
- spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두 개 이상 존재하지 않습니다.
- dic과 spell 모두 중복된 원소를 갖지 않습니다.
입출력예
spell | dic | result |
["p","o","s"] | ["sod", "eocd", "qixm", "adio", "soo"] | 2 |
["z", "d", "x"] | ["def", "dww", "dzx", "loveaw"] | 1 |
["s", "o", "m", "d"] | ["moos", "dzx", "smm", "sunmmo", "som"] | 2 |
입출력예설명
- "p", "o", "s" 를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다. 따라서 2를 return합니다.
- "z", "d", "x" 를 조합해 만들 수 있는 단어 "dzx"가 dic에 존재합니다. 따라서 1을 return합니다.
- "s", "o", "m", "d" 를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다. 따라서 2을 return합니다.
유의사항
- 입출력 예 #3 에서 "moos", "smm", "som"도 "s", "o", "m", "d" 를 조합해 만들 수 있지만 spell의 원소를 모두 사용해야 하기 때문에 정답이 아닙니다.
출력
function solution(spell, dic) {
const words = [];
permutation(spell, '', words); // spell 배열의 알파벳을 조합하여 가능한 단어들을 생성합니다.
for (const word of words) {
if (dic.includes(word)) { // 생성된 단어가 dic에 존재하는지 확인합니다.
return 1; // 단어가 존재하면 1을 반환합니다.
}
}
return 2; // 모든 단어를 확인했는데 존재하지 않으면 2를 반환합니다.
}
// 순열을 구하는 함수
function permutation(arr, current, result) {
if (current.length === arr.length) {
result.push(current);
return;
}
for (let i = 0; i < arr.length; i++) {
if (!current.includes(arr[i])) {
permutation(arr, current + arr[i], result);
}
}
}
permutation 함수는 arr 배열에서 current에 현재까지 조합된 알파벳을 저장하고, result 배열에 가능한 단어들을 모두 추가합니다. 재귀 호출을 통해 current에 알파벳을 추가하고, 모든 알파벳을 사용할 때까지 조합을 생성합니다. 이때, 중복되는 알파벳을 제외하기 위해 current에 이미 추가된 알파벳은 건너뛰도록 합니다.
solution 함수는 생성된 단어들을 dic 배열에 포함되어 있는지 확인합니다. 생성된 단어가 dic에 존재하면 1을 반환하고, 모든 단어를 확인한 후에도 존재하지 않으면 2를 반환합니다.
예를 들어, solution(["p", "o", "s"], ["sod", "eocd", "qixm", "adio", "soo"])를 호출하면 permutation 함수를 통해 가능한 단어인 "pos"가 생성됩니다. 이 단어는 dic 배열에 존재하지 않으므로 2가 반환됩니다. 마찬가지로, solution(["z", "d", "x"], ["def", "dww", "dzx", "loveaw"])를 호출하면 "dzx"라는 단어가 생성되고, 이 단어는 dic 배열에 존재하므로 1이 반환됩니다.