-
숨어있는 숫자의 덧셈(2) - 프로그래머스 문제프로그래머스 문제 풀기 2023. 3. 27. 13:54728x90
숨어있는 숫자의 덧셈(2) 문제 풀어보기!
문제 )
문자열 my_string이 매개변수로 주어지는데 소문자, 대문자, 자연수로만 구성되어 있다.
매개 변수 안의 자연수들의 합을 return하라.예시로 my_string = "aAb1B2cC34oOp"이라면 반환해야 할 값은 37이다. ( 1+2+34 = 37 )
내가 생각한 코드 작성 단계는 첫 번째, 먼저 자연수만 남길 수 있도록 하기. 두 번째 남겨진 자연수들을 합해서 리턴하기로 이루어져 있다.
자연수만 남기기 위해선 정규표현식을 사용해야 훨씬 편리하다는 것을 알았다.
/[^a-zA-Z]+/g -> 이 정규식 표현을 사용해 문자열을 필터링할 것이다.
const fil = /[^a-zA-Z]+/g; let number = my_string.match(fil); //["1","2","34"];이를 fil이란 변수에 저장한 후 my_string에서 문자열을 필터링하고 필터링한 (자연수만 남아있는) 값을 number라는 변수에 담아준다. 그러면 number에는 자연수만 남는데 console.log를 찍어보면 알 수 있다.
let answer = 0; number.map((x,i)=> answer += Number(number[i])); return answer;더한 값들을 저장할 변수 answer를 만들어두고 이제 map 함수를 이용해 각각의 숫자를 더해주면 된다.
그러면 answer에는 37이 리턴이 된다.
하지만 제출 후 채점했을 때 테스트 8 에러로 통과하지 못했다. 그 이유는 my_string에 자연수가 없을 경우를 고려하지 못했기 때문이다. 그래서 if문을 사용해 자연수가 없을 땐 0을 리턴하도록 했다.
let answer = 0; if(!number){ return 0; }else if(number){ number.map((x,i)=> answer += Number(number[i])); return answer; }최종 코드
function solution(my_string) { const fil = /[^a-zA-Z]+/g; let answer = 0; let number = (my_string.match(fil)); if(!number){ return 0; }else if(number){ number.map((x,i)=> answer += Number(number[i])); return answer; } }나의 주관적인 생각
결과적으로 테스트에 통과했지만 생각보다 필요하지 않는 코드로 구성되어 있어서 그런 게 아닐까 생각이 들었다.

그 이유는 러닝타임이 너무 오래걸렸기 때문이다. 그리고 다른 사람들이 작성한 코드랑 비교하면 위의 코드가 긴 편에 속한다.
이 코드를 수정한다면 불필요한 코드가 무엇이었을지 파악하고 그것을 수정하여 런타임을 줄이는데 목표를 잡아야겠다.
반응형'프로그래머스 문제 풀기' 카테고리의 다른 글
프로그래머스 코딩 입문 문제.js - 외계어 사전 (0) 2023.11.24 프로그래머스 문제 풀기 - 모스부호(1) (0) 2023.03.22 코딩테스트 연습 - 편지 (0) 2022.12.30 코딩 테스트 연습 - 아이스 아메리카노 (0) 2022.12.28 코딩테스트 연습 - 피자나눠먹기3 (0) 2022.12.28