오늘의 코딩테스트 한줄 - 숨어있는 숫자의 덧셈(1)

Edwin·2023년 2월 5일
0
post-thumbnail

숨어있는 숫자의 덧셈(1)

프로그래머스, 숨어있는 숫자의 덧셈(1)

문제설명 문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

  • 입출력,예(1) "aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4 입니다. 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.
  • 입출력,예(2) "1a2b3c4d123Z"안의 한자리 자연수는 1, 2, 3, 4, 1, 2, 3 입니다. 따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.
  • 유의사항 : 연속된 숫자도 한 자리 숫자로 취급합니다.

01 나의 풀이 살펴보기

function solution(my_string) {
  let answer = my_string.replace(/[^0-9]/g,'')
  .split("")
  .map((answer) => Number(answer))
  .reduce((prev, cur) => {return prev+cur},0);
  return answer;}

solution("aAb1B2cC34oOp")

나의 문제풀이는 총 6단계로 진행되었다. 물론 더 단순하게 접근할 수 있는 코드가 있을 것이지만, 나의 아는 것을 총동원해서 문제를 불어보았다.

  1. 정규표현식 my_string.replace(/[^0-9]/g,'') 해당부분이 구글에서 어시스트 받은 부분이었다. 배열을 잘라서 숫자로 변형했는데, NaN(숫자가 아님)을 배열에서 조건문으로 제거하려고 했지만 되지 않았다. 그래서 찾아봤더니 정규표현식 부분을 참고했다.
  • [^x] : not을 표현하며 x를 제외한 문자를 의미한다.
  • [x-y] : x-y 사이의 문자를 의미한다.
  • [^0-9] : 즉 매개변수에서 0-9를 제외한 문자를 찾는다.
  1. 문자변경하기 replace(/[^0-9]/g,'') 정규표현식으로 찾은 문자를 공백으로 변경한다.
  2. 문자열자르기 split("") 공백단위로 문자열을 잘랐다.
  3. map() 메소드 map((answer) => Number(answer) 반복문을 돌며, 인자 하나하나를 숫자열로 형변환시킨다.
  4. 누계계산기 reduce()메소드를 사용하여, 추출한 숫자를 누계하여 합산한다.
  5. 그리고 그 값을 리턴한다.

02 다른 풀이 살펴보기(1)

function solution(my_string) {
    return my_string.split("")
    .filter((v)=> !isNaN(v))
    .reduce((a,b) => parseInt(a)+parseInt(b));
}

결국 reduce() 메소드를 사용하는 부분은 동일했다. 차이점은 filter() 메소드의 활용이었다. .filter((v)=> !isNaN(v)) 내용을 보면, 인자 하나에서 isNaN 이 아닌 것만 결과값으로 리턴한다. 내가 조건문에서 NaN으로 하고 싶었던 부분을 여기서 방법을 찾았다. 그 내용에 대해서 reduce()를 진행했는데, 현재 인자가 문자열이기에 해당 내용을 parseInt()메소드를 통해서 정수라는 것을 선언한 것 같다.

03 다른 풀이 살펴보기(2)

function solution(my_string) {
    return my_string.match(/[0-9]/g)
    .reduce((a,b) => parseInt(a)+parseInt(b));
}

풀이 역시 reduce() 메소드를 사용하는 부분은 동일했다. 여기서는 match()메소드를 했다. match()는 특정 텍스트 안에 검색할 단어가 포함되어 있는지 검색한다. 인자에서 해당내용을 찾으면 이를 반환한다. 그리고 인자로는 정규표현식으로 해당 내용을 찾았다. 내가 찾은 방법에서는 [^0-9]를 통해 숫자가 아닌 문자를 추출해서 공백으로 바꾸는 등으로 작업을 했던 것과 다르게 간략하게 처리했다. 내가 replace(), split(), map() 를 통해서 작업었던 것을 단순화시킨 점에 놀란다.

profile
신학전공자의 개발자 도전기!!

0개의 댓글