“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
코딩 테스트 입문
소인수분해
문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 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] |
입출력 예 설명
- 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
- 17은 소수입니다. 따라서 [17]을 return 해야 합니다.
- 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.
출력
function solution(n) {
var answer = [];
for (var i = 2; i <= n; i++) {
while (n % i === 0) {
if (answer[answer.length - 1] !== i) { // 이전에 추가한 소인수와 같지 않은 경우에만 추가
answer.push(i);
}
n /= i;
}
}
return answer;
}
soultion 함수의 인자로 주어진 수 n을 받고
answer라는 빈 배열을 초기화, 이 배열은 소인수를 저장할 목적으로 사용되고 for문을 사용해 i를 2부터 n까지 증가시키면서 소인수를 찾습니다ㅏ. while 반복문을 사용해 n을 i로 나눌 수 있는지 확인하고, n을 i로 나눌 수 있다면 while문이 실행됩니다. n을 i로 나눈 후, n의 값을 갱신하고 이는 소인수를 찾은 부분을 제외한 나머지를 처리하기 위한 과정입니ㅏㄷ.
while 문은 더 이상 실행되지 않을 때까지 4~6 단계를 반복합니다. 이렇게 하면 n은 더 이상 소인수로 나눌 수 없는 상태가 되고 for문을 통해 모든 소인수를 찾았을 때 answer 배열에는 소인수들이 오름차순으로 저장되어 있습니다.
answer배열을 반환하고 함수가 종료됩니다.
컨트롤 제트
문제 설명
숫자와 "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 |
입출력 예 설명
- 10 + 20 + 30 + 40 = 100을 return 합니다.
- "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.
출력
function solution(s) {
var answer = 0;
var numbers = s.split(" ");
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === "Z") {
answer -= parseInt(numbers[i - 1]);
} else {
answer += parseInt(numbers[i]);
}
}
return answer;
}
answer 를 0 으로 초기화 하고 이 변수는 숫자들의 합을 저장합니다.
문자열 s를 공백을 기준으로 분리하여 숫자 배열 numbers로 저장합니다.
numbers 배열을 순회하면서 각 요소를 확인합니다.
현재 요소가 "Z"인 경우, 바로 이전 숫자를 answer에서 뺍니다.
현재 요소가 숫자인 경우, 해당 숫자를 answer 에 더합니다.
모든 요소를 처리한 후 answer값을 반환합니다.
중복된 문자 제거
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
입출력 예
my_string | result |
"people" | "peol" |
"We are the world" | "We arthwold" |
입출력 예 설명
- "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.
- "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.
출력
function solution(my_string) {
var answer = '';
var seen = new Set();
for (var i = 0; i < my_string.length; i++) {
var char = my_string[i];
if (!seen.has(char)) {
seen.add(char);
answer += char;
}
}
return answer;
}
Set 자료 구조를 활용해 중복된 문자를 체크하고 문자열을 순회하면서 각 문자가 이미 seenSet에 있는지 확인한 후, 처음 등장하는 문자이인 경우에만 seen Set 에 추가하고 결과 문자열 에도 추가합니다.