금일 풀이부터는 간단한 문제라도 메소드의 사용법이나 흐름을 완벽하게 이해했는지 확인하고자 풀이를 조금 더 자세히 기술할 예정이다.
그동안 풀었던 문제들은 당장 해결
하기위한 코드를 짰었다면,
오늘부터는 왜 이러한 풀이로 코드가 구성 되었는지 구체적인 설명
이 가능하도록 하여
다른 유형의 문제를 마주했을때
문제의 풀이 방법과 문제 해결방안을 모색하는 도중에 좀 더 다양한 각도에서 접근할 수 있는 시야를 넓히기 위함이다.
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(' ')
메소드를 통해 빈칸으로 구분되어 다시 문자열로 반환되는 형태인 것이다.
추후 문자열 <=> 배열
을 왔다갔다 해야하는 문제에서 꽤 유용하게 쓸 수 있을 것 같다.