Winnie The Pooh Bear 코딩테스트 입문

코딩테스트

코딩테스트 입문

코딩은 처음이라 2023. 6. 3. 20:59

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

프로그래머스 (programmers.co.kr)

 

코딩테스트 입문

 

 

 

제곱수 판별하기

문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 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에 덧붙입니다.

반응형