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;
}