숨어있는 숫자의 덧셈 (2)(Lv.0)[isNaN()과 변수 초기화]
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
- 문자열에 자연수가 없는 경우 0을 return 해주세요.
입출력 예my_stringresult
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
입출력 예 설명
입출력 예 #1
- "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.
입출력 예 #2
- "1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.
<제출 답안>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
let arr1 = my_string.split("");
let arr2 = [];
let result = [];
for(let x in arr1){
arr1[x] = +arr1[x] // arr1 요소들 숫자화
if(Number.isInteger(arr1[x])){ // 숫자일 때 arr2에 숫자를 집어 넣기
arr2 += arr1[x]
}
else{
if(arr2.length != 0){ // arr2가 빈칸일 때 push 되는 것 막기
result.push(arr2)
}
arr2 = []; // arr2 영어지점에서 초기화
}
}
return result.reduce((a,c,i) => Number(a) + Number(c),0)
}
|
cs |
테스트는 통과하는데 두가지 문제가 있다.
1.null을 0으로 만들지 못했다.(문제 조건 불만족)
2.마지막에 숫자로 끝날 경우, 코드 실행이 불가능하다.
나의 경우 처음 설계를 아래와 같이 해주었다.
- 문자열에서 알파벳 제외
숫자들을 더한다. - 숫자 나올때 주머니1에 저장.
문자 나올때 주머니1 다 털어서 주머니 2에 넣어주고
(그럼 문자 나오기 전까지는 문자열로 더해져야함.)
<정답>
function solution(my_string) {
let arr = [...my_string];
let total = [];
let t = '';
for (let i = 0; i < arr.length; i++) {
if (!isNaN(Number(arr[i]))) {
t += arr[i];
if (isNaN(Number(arr[i + 1]))) {
total.push(t);
t = '';
}
}
}
return total.reduce((a, c) => a + Number(c), 0);
}
[보충]
<isNaN()>
isNaN() - 매개변수가 숫자인지 검사하는 함수입니다.(NaN은 Not a Number입니다.)
<변수의 초기화>
변수의 초기화는 let 변수명 =' '; 으로 한다.(이렇게 하면 숫자가 더해지면 문자열로 더해짐 3에 4가 더해지면 34로 출력)
설계는 맞는 방향으로 갔으나, 그걸 구현할 실력이 많이 모자르다.
매일 부딪혀보는 수밖에..
웃긴건... for문 제대로 못쓰는거 쓰니깐 for문 때문에 에러가....
쓰던대로 쓰자..ㅎㅎ;