Bomb Kirby Running

코딩 테스트 챌린지

코딩테스트 14

^. ̫ .^ 2023. 5. 30. 22:39

728x90

문제1 가까운 수

정수 배열 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
function solution(array, n) {
  let closest = array[0]; 
  let minDiff = Math.abs(array[0] - n); 

  for (let i = 1; i < array.length; i++) {
    const diff = Math.abs(array[i] - n);

    if (diff < minDiff || (diff === minDiff && array[i] < closest)) {
      closest = array[i];
      minDiff = diff;
    }
  }

  return closest;
}


초기값으로 배열의 첫 번째 요소를 `closest`에 저장하고, 첫 번째 요소와 `n`과의 차이를 `minDiff`에 저장합니다.
배열의 두 번째 요소부터 끝까지 반복하면서 현재 요소와 `n`과의 차이를 `diff`에 저장합니다.
`diff`가 `minDiff`보다 작거나, `diff`와 `minDiff`가 동일한 경우에는 현재 요소를 `closest`로 선택하고, `minDiff`를 `diff`로 업데이트합니다. 이때, 동일한 차이인 경우에는 더 작은 수를 선택합니다.
반복이 끝나면 `closest`에 저장된 가장 가까운 수를 반환합니다.

 

문제2 369 게임

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

제한사항

  • 1 ≤ order ≤ 1,000,000

입출력 예

order result
3 1
29423 2
function solution(order) {
  let clapCount = 0; 

  const orderString = order.toString();
  for (let i = 0; i < orderString.length; i++) {
    const digit = parseInt(orderString[i]); 

    if (digit === 3 || digit === 6 || digit === 9) {
      clapCount++;
    }
  }

  return clapCount;
}


`order`를 문자열로 변환하여 `orderString`에 저장합니다.
`orderString`의 각 자리수를 반복하면서 현재 자리수의 숫자를 `digit`에 저장합니다.
`digit`이 3, 6, 9 중 하나인 경우 박수 횟수인 `clapCount`를 증가시킵니다.
반복이 끝나면 `clapCount`에 저장된 박수 횟수를 반환합니다.

 

문제3 암호 해독

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요

 

제한사항

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

입출력 예

cipher code result
"dfjardstddetckdaccccdegk" 4 "attack"
"pfqallllabwaoclk" 2 "fallback"
function solution(cipher, code) {
    let answer = '';
    
    for (let i = code - 1; i < cipher.length; i += code) {
        answer += cipher[i];
    }
    
    return answer;
}

 

 먼저, 빈 문자열 `answer`를 선언합니다. 이 변수는 추출된 암호 문자들을 저장할 용도로 사용됩니다.

 `cipher` 문자열을 반복하면서 배수 번째 글자를 추출합니다. 이를 위해 반복문을 사용하고, 반복 변수 `i`를 `code - 1`로 초기화합니다. (`code - 1`인 이유는 배열 인덱스가 0부터 시작하기 때문입니다.)
반복문의 조건을 `i`가 `cipher`의 길이보다 작을 때까지로 설정하여 문자열을 벗어나지 않도록 합니다.
반복문 내부에서 `cipher[i]`를 `answer`에 추가합니다. 이는 `cipher` 문자열의 `i`번째 글자를 `answer`에 붙여나가는 과정입니다.
모든 반복이 완료되면 `answer`를 반환합니다. 이는 해독된 암호 문자열을 의미합니다.

문제4 암호 해독

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.

입출력 예

cipher result
"cccCCC" "CCCccc"
"abCdEfghIJ" "ABcDeFGHij"
function solution(my_string) {
    var answer = '';

    for (var i = 0; i < my_string.length; i++) {
        var char = my_string[i];
        
        if (char.toUpperCase() === char) {
            answer += char.toLowerCase();
        } else {
            answer += char.toUpperCase();
        }
    }
    
    return answer;
}


빈 문자열 `answer`를 선언합니다. 이 변수는 변환된 문자열을 저장할 용도로 사용됩니다.
`my_string`을 반복하면서 각 문자에 접근합니다.
반복문 내부에서 조건문을 사용하여 현재 문자가 대문자인지 소문자인지 확인합니다.
대문자인 경우에는 `toLowerCase` 메서드를 사용하여 소문자로 변환한 후 `answer`에 추가합니다.
소문자인 경우에는 `toUpperCase` 메서드를 사용하여 대문자로 변환한 후 `answer`에 추가합니다.
모든 반복이 완료되면 `answer`를 반환합니다.