
다음과 같은 문자열 s가 주어졌을 때, 문자열에 숫자 단어가 포함되어 있다면 이를 실제 숫자로 변환하여 정수 형태로 반환해야 합니다.
s = "one4seveneight" → 1478
s = "23four5six7" → 234567
s = "2three45sixseven" → 234567
function solution(s) {
const wordToNum = {
zero: 0, one: 1, two: 2, three: 3, four: 4,
five: 5, six: 6, seven: 7, eight: 8, nine: 9,
};
let letter = '';
let answer = '';
for (let i = 0; i < s.length; i++) {
if (!isNaN(s[i])) {
answer += s[i];
continue;
} // 숫자일 경우 바로 answer에 추가
letter += s[i]; // 문자일 경우 letter에 추가
if (wordToNum.hasOwnProperty(letter)) {
// 단어가 완성되었을 경우 answer에 추가한 후 초기화
answer += wordToNum[letter];
letter = '';
}
}
return Number(answer);
}
letter 변수에 누적합니다.letter가 숫자 단어("one", "seven" 등)로 완성되면 숫자로 치환하여 answer에 추가합니다.0~9)는 그대로 answer에 누적합니다.function solution(s) {
let numbers = ["zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"];
let answer = s;
for (let i = 0; i < numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
"zero" ~ "nine"까지 모든 숫자 단어에 대해 split()으로 문자열을 분리하고, 해당 숫자로 join()합니다.s = "one4seveneight"
i = 0, "zero": 없음 → 그대로i = 1, "one":answer.split("one") → ["", "4seveneight"]join(1) → "14seveneight"i = 7, "seven":answer = "14seveneight"split("seven") → ["14", "eight"]join(7) → "147eight"i = 8, "eight":split("eight") → ["147", ""]join(8) → "1478"→ 최종적으로 answer = "1478"
| 방식 | 작동 방식 | 성능 | 가독성/유지보수 |
|---|---|---|---|
| 문자 누적 | 문자를 한 글자씩 읽으며 누적 후 변환 | 우수 | 비교적 복잡함 |
| split-join | 전체 문자열을 숫자 단어 기준으로 나눠 치환 | 보통 | 매우 우수 |