Bomb Kirby Running

코딩 테스트 챌린지

코딩 테스트 15

^. ̫ .^ 2023. 5. 31. 17:36

728x90

문제1 영어가 싫어요

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

 

제한사항

  • numbers는 소문자로만 구성되어 있습니다.
  • numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers의 길이 ≤ 50
  • "zero"는 numbers의 맨 앞에 올 수 없습니다.

입출력 예

numbers result
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067
function solution(numbers) {
  const numDict = {
    zero: 0,
    one: 1,
    two: 2,
    three: 3,
    four: 4,
    five: 5,
    six: 6,
    seven: 7,
    eight: 8,
    nine: 9
  };

  let answer = "";
  let currentNumber = "";

  for (let i = 0; i < numbers.length; i++) {
    currentNumber += numbers[i];

    if (numDict.hasOwnProperty(currentNumber)) {
      answer += numDict[currentNumber];
      currentNumber = "";
    }
  }

  return parseInt(answer);
}



`numDict`라는 객체를 생성하여 영어 단어와 해당하는 숫자를 매핑합니다. 예를 들어, "zero"를 0으로, "one"을 1로 매핑합니다.
빈 문자열 `answer`와 현재 처리 중인 영어 단어를 저장할 변수인 `currentNumber`를 선언합니다.
`numbers` 문자열을 순회하면서, 현재 문자를 `currentNumber`에 추가합니다.
`numDict` 객체에서 `currentNumber`를 키로 사용하여 해당하는 숫자가 있는지 확인합니다.
만약 `currentNumber`가 `numDict`의 키로 존재한다면, 해당 숫자를 `answer`에 추가하고, `currentNumber`를 초기화합니다.
반복이 완료되면 `answer`를 정수로 변환하여 반환합니다.
해당 코드는 문자열을 영어 단어 단위로 읽어들이면서, 해당하는 숫자로 변환하여 `answer`에 추가하는 방식으로 작동합니다. 이를 통해 주어진 문자열을 정수로 변환할 수 있습니다.

문제2 인덱스 바꾸기

문자열 my_string과 정수 num1num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 1 < my_string의 길이 < 100
  • 0 ≤ num1, num2 < my_string의 길이
  • my_string은 소문자로 이루어져 있습니다.
  • num1 ≠ num2

입출력 예

my_string num1 num2 result
"hello" 1 2 "hlelo"
"I love you" 3 6 "I l veoyou"

 

function solution(my_string, num1, num2) {
  let charArray = Array.from(my_string);
  [charArray[num1], charArray[num2]] = [charArray[num2], charArray[num1]];
  return charArray.join(''); 
}


`my_string`을 배열로 변환하기 위해 `Array.from()` 함수를 사용합니다. 이 함수는 문자열을 문자 배열로 변환합니다. 
변환된 문자 배열을 `charArray`라는 변수에 할당합니다.
`charArray` 배열의 `num1` 위치와 `num2` 위치에 해당하는 값을 교환하기 위해 배열 해체 할당을 사용합니다. 
교환된 값을 가진 `charArray` 배열을 다시 문자열로 변환하기 위해 `join()` 함수를 사용합니다. `join()` 함수는 배열의 모든 요소를 하나의 문자열로 연결하는 역할을 합니다.
최종적으로 변환된 문자열을 반환합니다.

 

문제3 한번만 등장한 문자

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

 

제한사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예

num1 result
"abcabcadc" "d"
"abdc"
"abcd"
"eho" "eho"
function solution(s) {
  const charCount = new Map(); 

  for (let i = 0; i < s.length; i++) {
    const char = s[i];
    charCount.set(char, (charCount.get(char) || 0) + 1);
  }

  let answer = '';

  charCount.forEach((count, char) => {
    if (count === 1) {
      answer += char;
    }
  });

  return answer.split('').sort().join('');
}


`charCount`라는 `Map` 객체를 생성하여 문자의 등장 횟수를 저장합니다.
문자열 `s`를 순회하면서 각 문자의 등장 횟수를 `charCount`에 저장합니다. 이미 등장한 문자일 경우 이전 등장 횟수에 1을 더한 값을 저장합니다.
`answer` 변수를 초기화합니다.
`charCount`를 순회하며 등장 횟수가 1인 문자를 찾아 `answer`에 추가합니다.
`answer` 문자열을 배열로 변환한 후 사전 순으로 정렬합니다.
정렬된 배열을 다시 문자열로 변환하여 반환합니다.

 

문제4 약수 구하기

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ n ≤ 10,000

입출력 예

n result
24 [1, 2, 3, 4, 6, 8, 12, 24]
29 [1, 29]
function solution(n) {
  const factors = [];

  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      factors.push(i);
    }
  }

  return factors;
}

 

빈 배열 `factors`를 선언합니다. 이 배열에 `n`의 약수를 저장할 것입니다.

`for` 루프를 사용하여 `i`를 1부터 `n`까지 증가시킵니다. `i`는 `n`을 나누어서 약수인지 확인하기 위한 변수입니다.
`if` 문을 사용하여 `n`을 `i`로 나누었을 때 나머지가 0인지 확인합니다. 만약 나머지가 0이라면 `i`는 `n`의 약수입니다.
`factors` 배열에 약수인 `i`를 `push` 메서드를 사용하여 추가합니다.
`for` 루프가 종료되면 `factors` 배열에는 `n`의 약수들이 저장되어 있습니다.
`factors` 배열을 반환합니다.