[TIL] 250520 알고리즘(JS)

이세령·2025년 5월 20일
0

TIL

목록 보기
122/126

문제

https://school.programmers.co.kr/tryouts/85892/challenges?language=javascript

처음에는 숫자면 num에 추가해서 문자가 나올때까지 반복하다가 문자가 나오면 결과값에 더해주고 결과를 출력했다.

function solution(my_string) {
    var answer = 0;
    const splitStringList = my_string.split('');
    let num = '';
    for(let i = 0; i < splitStringList.length; i++) {
        if (!isNaN(splitStringList[i])) {
            num += String(splitStringList[i]);
        } else {
            answer += Number(num);
            num = '';
        }
    }
    return answer;
}

기본 실행은 통과했는데 테스트 케이스에서 35%만 통과했는데 문제는 가장 마지막에 숫자가 있으면 해당 숫자를 더해주지 않는다는 점이였다.

예를 들어 aAb1c2d34 이런 문자열이 있으면 마지막에 num에는 34가 담기고 그대로 끝난다.

function solution(my_string) {
    var answer = 0;
    const splitStringList = my_string.split('');
    let num = '';
    for(let i = 0; i < splitStringList.length; i++) {
        if (!isNaN(splitStringList[i])) {
            num += String(splitStringList[i]);
            if (i === splitStringList.length - 1) {
                answer += Number(num);
            }
        } else {
            answer += Number(num);
            num = '';
        }
    }

    return answer;
}

마지막 값 처리하는 부분을 추가해주니 통과되었다.

리팩토링

function solution(my_string) {
    let answer = 0;
    let num = '';
    
    // split('')을 사용하지 않고 직접 문자열을 순회
    for(let i = 0; i < my_string.length; i++) {
        const char = my_string[i];
        
        if(!isNaN(char)) {
            // 숫자인 경우 num에 추가
            num += char;
        } else if(num !== '') {
            // 숫자가 아니고 num이 비어있지 않은 경우
            answer += parseInt(num);
            num = '';
        }
    }
    
    // 마지막 숫자 처리
    if(num !== '') {
        answer += parseInt(num);
    }
    
    return answer;
}
  • js에서는 직접 문자열 순회가 가능했기에 split()함수를 추가적으로 사용하지 않았다.
  • num이 남아있는지 매 반복마다 마지막인지 체크하지 않고 루프가 끝난 후에 한번만 확인한다.
profile
https://github.com/Hediar?tab=repositories

0개의 댓글