728x90
문제 및 제한사항
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
**제한사항**
1 ≤ my_string의 길이 ≤ 1,000
1 ≤ my_string 안의 자연수 ≤ 1000
연속된 수는 하나의 숫자로 간주합니다.
000123과 같이 0이 선행하는 경우는 없습니다.
문자열에 자연수가 없는 경우 0을 return 해주세요.
풀이 방법
예를 들어 주어진 문자열이 "aAb1B2cC34oOp"라면, 여기의 숫자 1+2+34 = 37이 반환되어야 한다.
주의해야 할 점이 연속된 수는 하나의 숫자로 간주한다.
정규표현식을 사용해 문자열에서 대문자~소문자 모두를 공백으로 바꿔 없애주었다.
그러면 " 1 2 34 " 이렇게 나오는데, 수정하기 위해서 공백을 기준으로 쪼개 배열로 만들어준다.
배열로 만든 후에는 for문을 돌려 해당 요소가 !isNaN (숫자)라면 sum에 해당 값을 더하게 해준다.
이 때 요소는 숫자가 아니기 때문에 *1을 하거나 Number, parseInt로 숫자화 시켜주어야 한다.
코드
function solution(my_string) {
let sum = 0;
let Newmy_string = my_string.replace(/[A-z]/g, " ").split(' ')
for (let i = 0; i < Newmy_string.length; i++) {
if (!isNaN(Newmy_string[i])) {
sum += Number(Newmy_string[i])
}
}
return sum
}
또 다른 풀이
function isAlpha(c) {
return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z");
}
function isDigit(c) {
return c >= "0" && c <= "9";
}
function solution(my_string) {
let answer = 0;
let num = "";
for (let i = 0; i < my_string.length; i++) {
if (isDigit(my_string[i])) {
num += my_string[i];
}
if (isAlpha(my_string[i]) || i === my_string.length - 1) {
if (num !== "") {
answer += parseInt(num);
num = "";
}
}
}
return answer;
}
덧붙일 경우의 수나 고려해야 할 오류가 많아 어렵다.
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 자릿수 더하기 (0) | 2023.04.06 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 입문 : 한 번만 등장한 문자 (0) | 2023.04.06 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 진료순서 정하기 (0) | 2023.04.06 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 가까운 수 (0) | 2023.03.28 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 2차원으로 만들기 (0) | 2023.03.28 |