문자열 my_string
이 매개변수로 주어집니다. my_string
은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string
안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
my_string
의 길이 ≤ 1,000my_string
안의 자연수 ≤ 1000my_string | result |
---|---|
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
실패한 코드
function solution(my_string) {
const stringArr = [...my_string]
const numberArr = []
let numberString = ''
for (let i = 0; i < stringArr.length; i++) {
if (!isNaN(Number(stringArr[i]))) {
if (isNaN(Number(stringArr[i + 1])) && isNaN(Number(stringArr[i - 1]))) {
numberArr.push(Number(stringArr[i]))
} else if (
isNaN(Number(stringArr[i - 1])) &&
!isNaN(Number(stringArr[i + 1]))
) {
numberString = stringArr[i] + stringArr[i + 1]
} else if (
!isNaN(Number(stringArr[i - 1])) &&
!isNaN(Number(stringArr[i + 1]))
) {
numberString += stringArr[i + 1]
} else if (i === 1 && !isNaN(Number(stringArr[i - 1]))) {
numberArr.push(Number(stringArr[i - 1] + stringArr[i]))
}
}
}
numberArr.push(Number(numberString))
return numberArr.reduce((a, b) => a + b)
}
const my_string = '11a2b3c4d1234Z'
다른 사람 풀이
function solution(my_string) {
return my_string.split(/[a-zA-Z]/g).reduce((a, c) => +a + +c, 0)
}
와, 오늘도 진짜 반성하게 된다. 너무 직관적으로만 문제를 풀려고 하는게 문제인 것 같다. 자꾸 for문을 이용해서만 문제를 풀려고 하는 것도 문제인 것 같다.
일단은 코드를 먼저 작성하려고 하기보다는 문제를 이해했으면 잠시 컴퓨터에서 떨어져서 어떻게 문제를 해결하면 좋을지 적어도 5분 정도는 생각한다음에 컴퓨터 앞에 앉아봐야겠다.
다른 사람풀이를 보면 정규표현식으로 간단하게 처리했다. 5분 정도 생각한다고 저런 풀이가 한 번에 생각이 나지는 않겠지만, 자꾸 먼저 코드로만 문제를 풀려고 하는 건 조금이나마 방지할 수 있을 거라 생각한다.