728x90
반응형
24년 12월 16일
해결한 문제 갯수: 4
문제 설명
문제 분석
- 문자열은 영문자, 숫자로만 구성됩니다.
- 연속된 숫자는 하나의 숫자로 취급합니다.
- '000123'과 같이 0이 선행하는 경우는 없습니다.
- 숫자가 없는 경우 0을 반환합니다.
첫 번째 접근: Reduce를 이용한 처리
function solution(str) {
return Array.from(str).reduce((a, c, i) => {
if(Number(c) || c === '0'){
a += c
} else if(!Number.isNaN(Number(a.slice(-1)))) a += ' '
return a
}, '').split(' ').reduce((a, c) => {
if(Number(c)) a += Number(c)
return a
}, 0)
}
1. 첫번째 reduce
- 문자열을 배열로 변환합니다.
- 현재 값이 숫자인 경우 누적합니다.
- 현재 값이 문자인경우 이전값이 숫자일때, 공백을 추가합니다.
2. 두 번째 reduce
- 공백으로 분리된 숫자를 합산합니다.
두 번째 접근: map()을 이용한 처리
function solution(str) {
return Array.from(str)
.map(l => Number.isNaN(Number(l)) ? ' ': l)
.join('')
.trim()
.split(' ')
.reduce((a, c) => a += Number(c), 0)
}
개선사항
- 가독성 향상
세 번째 접근: 문자열 순회 * 1
function solution(str) {
let answer = 0;
let currentNumber = '';
for(let char of str) {
if(!isNaN(Number(char))) {
currentNumber += char;
} else if(currentNumber) {
answer += Number(currentNumber);
currentNumber = '';
}
}
if(currentNumber) answer += Number(currentNumber);
return answer;
}
개선사항
- 문자열 순회 횟수 최소화 및 메모리 사용 최소화(불필요한 배열 생성 및 중간 문자열 X)
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
[프로그래머스] 부족한 금액 계산하기 (1) | 2024.12.18 |
---|---|
[프로그래머스] 외계어 사전 (0) | 2024.12.17 |
[프로그래머스] 치킨쿠폰 (0) | 2024.12.15 |
[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (1) | 2024.12.14 |
[프로그래머스] 정수를 나선형으로 배치하기 (0) | 2024.12.13 |