문제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과 정수 num1, num2가 매개변수로 주어질 때, 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` 배열을 반환합니다.