“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
코딩테스트 입문
제곱수 판별하기
문제 설명
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ n ≤ 1,000,000
입출력 예
n | result |
144 | 1 |
976 | 2 |
입출력 예 설명
- 144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.
- 976은 제곱수가 아닙니다. 따라서 2를 return합니다.
출력
function solution(n) {
var sqrt = Math.sqrt(n);
if (sqrt === Math.floor(sqrt)) {
return 1;
} else {
return 2;
}
}
Math.sqrt()함수를 사용하여 주어진 자연수의 제곱근을 계산합니다.
계산한 제곱근이 소수점 이하가 없는 정수인 경우, 주어진 자연수는 제곱수입니다.
따라서 1을 반환하고 그렇지 않은 경우엔 주어진 자연수는 제곱수가 아니므로 2 를 반환합니ㅏㄷ.
예를 들어
solution(144)를 호출하면 1을 반환하고 144는 12인 제곱이므로 제곱수 입니다.
세균 증식
문제설명
어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 10
- 1 ≤ t ≤ 15
입출력예
n | t | result |
1 | 10 | 2048 |
7 | 15 | 229,376 |
입출력예설명
- 처음엔 2마리, 1시간 후엔 4마리, 2시간 후엔 8마리, ..., 10시간 후엔 2048마리가 됩니다. 따라서 2048을 return합니다.
- 처음엔 7마리, 1시간 후엔 14마리, 2시간 후엔 28마리, ..., 15시간 후엔 229376마리가 됩니다. 따라서 229,376을 return합니다.
출력
function solution(n, t) {
var bacteria = n;
for (var i = 0; i < t; i++) {
bacteria *= 2;
}
return bacteria;
}
반복문을 사용해 t시간 동안 세균의 수를 계산하고 초기 세균의 수르 변수 bacteria에 저장하고, 반복문을 t번 실행해 bactera를 2배씩 곱해나갑니다. 반복문이 종료된 후에는 t시간 후의 세균 수가 변수 bacterta에 저장되어 있습니다.
이 값을 반환합니다.
암호해독
문제설명
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
- 암호화된 문자열 cipher를 주고받습니다.
- 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ cipher의 길이 ≤ 1,000
- 1 ≤ code ≤ cipher의 길이
- cipher는 소문자와 공백으로만 구성되어 있습니다.
- 공백도 하나의 문자로 취급합니다.
입출력예
cipher | code | result |
"dfjardstddetckdaccccdegk" | 4 | "attack" |
"pfqallllabwaoclk" | 2 | "fallback" |
입출력예설명
- "dfjardstddetckdaccccdegk" 의 4번째, 8번째, 12번째, 16번째, 20번째, 24번째 글자를 합친 "attack"을 return합니다.
- "pfqallllabwaoclk" 의 2번째, 4번째, 6번째, 8번째, 10번째, 12번째, 14번째, 16번째 글자를 합친 "fallback"을 return합니다.
출력
function solution(cipher, code) {
var answer = '';
for (var i = code - 1; i < cipher.length; i += code) {
answer += cipher[i];
}
return answer;
}
solution 함수는 cipher와 code 라는 두 개의 매개변수를 받습니다.
var answer = ''; 는 빈 문자열로 초기화된 변수 answer 를 선언합니다.
이 변수는 해독된 암호 문자열을 저장할 것입니다. for루프를 사용해 암호를 해독합니다.
var i = code -1 은 반복 변수 i를 code -1로 초기화합니다. 이는 첫 번째 추출할 글자의 인덱스를 나타냅니다.
i < cipher.length은 i가 cipher 문자열의 길이보다 작을 때까지 루프를 실행합니다. 이는 문자열을 벗어나지 않도록 하는 조건입니다. i += code는 i를 code만큼 증가시킵니다. 이는 추출할 글자의 인덱스를 code만큼 건너뛰는 역할을 합니다.
루프 내부에서 answer += cipher[i];는 cipher 문자열에서 i번째 글자를 answer에 추가합니다.
return answer;는 해독된 암호 문자열인 answer를 반환합니다.
대문자와 소문자
문제설명
문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 영어 대문자와 소문자로만 구성되어 있습니다.
입출력예
my_string | result |
"cccCCC" | "CCCccc" |
"abCdEfghlJ" | "ABcDeFGHij" |
입출력예설명
- 소문자는 대문자로 대문자는 소문자로 바꾼 "CCCccc"를 return합니다.
- 소문자는 대문자로 대문자는 소문자로 바꾼 "ABcDeFGHij"를 return합니다.
출력
function solution(my_string) {
var answer = '';
for (var i = 0; i < my_string.length; i++) {
var char = my_string[i];
if (char === char.toUpperCase()) {
answer += char.toLowerCase();
} else {
answer += char.toUpperCase();
}
}
return answer;
}
for 루프를 사용하여 문자열을 순회합니다. for (var i = 0; i < my_string.length; i++)는 i를 0부터 my_string의 길이 - 1까지 증가시키면서 반복합니다.
var char = my_string[i];는 현재 순회 중인 문자열의 문자를 char 변수에 할당합니다.
if (char === char.toUpperCase())는 char가 대문자인지 확인합니다. char.toUpperCase()는 char를 대문자로 변환한 후 반환하므로, char과 char.toUpperCase()를 비교하여 같으면 char는 대문자입니다.
대문자인 경우 answer에 해당 문자를 소문자로 변환하여 추가합니다. answer += char.toLowerCase();는 char를 소문자로 변환한 값을 answer에 덧붙입니다.
대문자가 아닌 경우, 즉 소문자인 경우 answer에 해당 문자를 대문자로 변환하여 추가합니다. answer += char.toUpperCase();는 char를 대문자로 변환한 값을 answer에 덧붙입니다.