본문 바로가기
Research/problems

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

by RIEM 2022. 11. 21.
728x90

문제

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

해결

function solution(my_string) {
	
	const numbCollection = [];
	let strTempo = '';
	
	my_string.split('').forEach(el => {
		if(Number(el) >= 0) {
			strTempo += el
			
		} else {
			strTempo.length && numbCollection.push(strTempo);
			strTempo = '';
		}
	})
	
	if(strTempo.length) numbCollection.push(strTempo)
	if(numbCollection.length === 0) return 0
	
	const answer = Number(numbCollection.reduce((prev, cur) => Number(prev) + Number(cur)))

	return answer
}

console.log(solution("asdfsaaf11"))
  1. 가장 처음으로 생각한 부분은 파라미터를 split(‘’) 메서드로 쪼개고
  2. forEach로 각 chr이 숫자인지 아닌지 구분한 뒤 숫자(양수)일 경우, strTempo에 계속 str으로 덧붙여서 숫자가 이어지도록 한다. 숫자가 아닐 경우, 지금까지 모아둔 strTempo를 numbCollection 어레이에 푸시하고 strTempo를 초기화 시킨다.
  3. strTempo를 numbCollection에 푸시하는 조건이 숫자가 아닌 경우에만 해당되는데, 만약 아규먼트의 마지막 chr가 숫자가 올 경우 numbCollection에 푸시되지 않는다. 즉, strTempo에는 저장이 되지만 이것이 어레이에 업데이트가 되지 않는다는 문제가 발생한다. 이를 해결하기 위해 strTempo에 데이터가 있는 경우 푸시하라는 코드를 하나 추가했다.
  4. 그다음 이제 반환값을 설정해주어야 했는데, 우선 컬렉션에 어떠한 숫자도 모이지 않았을 경우 0을 리턴해야 하므로 즉각 리턴하는 코드를 바로 붙여주었다.
  5. 그 아래에는 컬렉션에 숫자들이 모여있는 조건 하에 reduce로 숫자들을 모두 더해서 anwer 변수에 넣어주었다. 이때 각 요소들이 str형태이므로 Number() 메소드로 숫자로 만들어서 더해주었다.

회고

처음에 생각한 방향은 1)풀이한 방식과 같이 str을 split 메소드로 쪼개서 접근하거나, 2)정규식으로 접근하는 방식을 생각했다. 정규식에 대한 지식이 없어 어쩔 수 없이 전자의 방식으로 접근했다. 하지만 다른 사람들이 정규표현식으로 풀이한 방식을 보니 코드가 매우 간결했다. 정규표현식을 공부해야 겠다는 생각이 조금씩 든다.

레퍼런스

https://school.programmers.co.kr/learn/courses/30/lessons/120864

 

728x90

댓글