[프로그래머스] 문자열 정수의 합

Jun_Gyu·2023년 9월 4일
0

프로그래머스

목록 보기
11/14
post-thumbnail

금일 풀이부터는 간단한 문제라도 메소드의 사용법이나 흐름을 완벽하게 이해했는지 확인하고자 풀이를 조금 더 자세히 기술할 예정이다.

그동안 풀었던 문제들은 당장 해결하기위한 코드를 짰었다면,
오늘부터는 왜 이러한 풀이로 코드가 구성 되었는지 구체적인 설명이 가능하도록 하여

다른 유형의 문제를 마주했을때
문제의 풀이 방법과 문제 해결방안을 모색하는 도중에 좀 더 다양한 각도에서 접근할 수 있는 시야를 넓히기 위함이다.

num_str 라는 매개변수로 받아 온 문자열 내의 숫자들을

모두 합하여 return 할 수 있도록 함수를 구현하는 문제이다.

첫 풀이

const solution = (num_str) => {
    let answer = 0;
    num_str.split('').map(Number).forEach(i => answer += i ) 
    return answer;
}

첫 풀이에서는 먼저 문자열num_str.split()메소드를 통해 문자열 요소 각각을 구분해주었다.

이후 해당 요소들을 .map(Number)메소드를 통해 숫자형 배열로 변환하고,
곧 이어 모든 숫자 요소들을 더해주기 위해 forEach 반복문을 사용하여

기존에 미리 생성해두었던 변수 answer에 값을 누적시키는 방법이다.


다른 풀이방법

위의 방법은 말 그대로 교과서적인 방법으로 문제를 해결한 형태이다.

하지만 조금 더 코드를 간단하게 작성할 수 있는 방법도 존재한다.


아래 풀이법은 다른 사람들의 코드를 참고한 풀이 방법이다.

// reduce 메소드 사용
const solution = num_str => [...num_str].reduce((acc, cur) => acc + Number(cur), 0)

잠시 잊고 지냈었던 .reduce()메소드의 사용을 통한 해결방법인데,

기존의 풀이 방법에
let answer = 0의 역할을 대신 수행하는 매개변수 acc (accumulator : 누산기)

forEach(i => answer += i )의 역할을 수행하는 매개변수`cur (current : 반복해서 추가

되는 요소)`를 한줄로 간단하게 정리한 모습이다.


위의 풀이점에 중요한 점이 한가지 존재하는데, 바로 전개연산자의 활용이다.


필자보다 더 확실히 공부를 하고있는 여러분들을 잘 알고 있는 내용일수도 있겠지만,

필자는 이번 풀이를 진행하면서 흘려 넘길뻔했던 전혀 몰랐었던 부분이었기에 한번 짚고 넘어가고자 한다.


전개연산자는 배열, 객체만 사용가능하다?

틀렸다.

전개연산자는 주로 배열과 객체데이터를 다룰 때 사용되지만,
사실 문자열에서도 사용이 가능하다.
특히 문자열을 마치 배열처럼 쪼개거나 결합하는데 있어서 굉장히 유용하게 쓰일 수 있다는 것이다.

예시를 들어보자면,

// 문자열 분할
const str = "Hello";
const strArray = [...str];
console.log(strArray); // ["H", "e", "l", "l", "o"]

// 문자열 결합
const str1 = "Hello";
const str2 = "World";
const combinedString = [...str1, ...str2].join(" ");
console.log(combinedString); // "Hello World"

위와 같이 문자열을 요소 하나하나씩 분할하여 대괄호를 감싸 배열로 변환이 가능하며,

서로 다른 두 문자열을 전개연산자를 통해 한 배열에 묶어준 뒤, .join(' ')메소드를 통해 빈칸으로 구분되어 다시 문자열로 반환되는 형태인 것이다.

추후 문자열 <=> 배열을 왔다갔다 해야하는 문제에서 꽤 유용하게 쓸 수 있을 것 같다.

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글