TIL

TIL 20241105 (숫자 문자열과 영단어 - 알고리즘)

j-coder 2024. 11. 5. 21:20

숫자 문자열과 영단어

 

풀이 코드

 

function solution(s) {
    let answer = '';
    const numbers = {
        'zero': 0, 'one': 1, 'two': 2,
        'three': 3, 'four': 4, 'five': 5,
        'six': 6, 'seven': 7, 'eight': 8,
        'nine': 9,
    };
    
    let currentWord = '';
    for (let i = 0; i < s.length; i++) {
        const char = s[i];
        
        if (char >= '0' && char <= '9') {
            answer += char;
        } else {
            currentWord += char;
            if (currentWord in numbers) {
                answer += numbers[currentWord];
                currentWord = '';
            }
        }
    }
    
    return Number(answer);
}

 

 

설명

function solution(s) {

문자열을 여러 번 슬라이스하고 각 영단어를 반복해서 검색하는 방식의 함수

solution 함수를 만들고 numbers를 매개변수로 받는다.

 

 let answer = '';

결과를 저장할 빈 문자열 변수를 만듬

 

const numbers = {
        'zero': 0, 'one': 1, 'two': 2,
        'three': 3, 'four': 4, 'five': 5,
        'six': 6, 'seven': 7, 'eight': 8,
        'nine': 9,
    };

Map 대신 객체를 사용

숫자와 영단어를 매핑

매핑 : 두 개의 집합 관계를 정의

 

    let currentWord = '';

현재 영단어를 저장하는 변수 선언

 

    for (let i = 0; i < s.length; i++) {
        const char = s[i];

s길이 전 까지 만큼 순환하는 for문

현재 인덱스 i에 해당하는 문자를 char라는 변수에 저장

 

        if (char >= '0' && char <= '9') {
            answer += char;

현재 0에서 9사이의 문자가 숫자일때 answer에 그 숫자를 추가한다.

 

        } else {
            currentWord += char;

숫자가 아닌경우 현재 문자를 currentWord에 추가

슬라이스 대신 영단어를 구성

 

            if (currentWord in numbers) {
                answer += numbers[currentWord];
                currentWord = '';

현재 영단어가 numbers에 존재하는지 확인하는 if 문 (숫자 인지 확인)

currentWord가 numbers에 있으면 숫자를 answer에 추가

current 초기화하고 다음 단어 처리할 준비

 

            }
        }
    }

if, else, for문 루프 끝

 

    return Number(answer);
    }

결과를 숫자로 변환하여 반환