프로그래머스 - 하샤드 수

haesoo·2021년 6월 17일
0

알고리즘

목록 보기
4/5

📝 문제설명


🔑 나의 풀이

먼저 문제를 읽어본 뒤 3단계로 나누어 처리과정을 생각해보았다.

  1. 주어지는 양의 정수 x를 Array 로 만들어주어야한다. 그래야 인덱스를 이용해 각 자릿수의 합을 구할 수 있다.
  2. for문도 생각해보았으나 reduce 가 훨씬 간편하게 작성할 수 있으니까 reduce 를 사용해서 결과 값을 변수에 담아주자.
  3. 위의 결과 값을 result 라고 한다면 result % x === 0 이라면 true 아니라면 false !

1. 양의 정수 x를 Array 로 만들어주기


x가 150 이라고 친다면, var x =150; 데이터 타입이 **number**인 상태이고 **split( )**을 사용해주려면 데이터 타입을 **string** 으로 바꿔주어야하니까 String 또는 toString()을 이용해주면 된다고 생각했다!
fuction solution (x) {
var array = x.toString().split("")
//여기서 구분자를 지정해주지 않고 "" 를 넣어주어야 ["1","5","0"] 로 쪼개져서 나온다! 
} 

2.reduce( ) 사용하기

Array.prototype.reduce( )

reduce가 어떻게 작동하는지에 대해서는 mdn에서도 자세히 설명하고 있고 강의에서도 들은 적이 있지만 여전히 나에겐 어렵다...😭 reduce() 는 콜백의 반환값을 가지는 매개변수 하나와 처리할 현재 요소의 값을 가지는 매개변수까지 두 개를 넣어서 사용하면 되는데 사용해보는 것에 의미를 두며 코드를 작성하였다.

fuction solution (x) {
	var array = x.toString().split("")
	//여기서 구분자를 지정해주지 않고 "" 를 넣어주어야 ["1","5","0"] 로 쪼개져서 나온다! 
	var reducer = (accuulator,currentValue) => accumulator + currentValue;
 	var result = array.reduce(reducer);
  	// 한번에 작성할 수도 있다.
  	// var result = array.reduce((accuulator,currentValue) => accumulator + currentValue)
} 

그런데 여기까지 작성한 뒤 쪼개는 것도 성공했고 reduce 까지 작성했지만 데이터 타입은 여전히 string이기 때문에 ["1","5","0"] -> "150" 으로 출력되어지는 것을 알 수 있다. 결과값은 6이어야하는데!!
혹시 reduce를 사용해주면서 매개변수의 타입을 Number를 이용해 바꿔서 결과값을 출력할 수 있지 않을까 라는 생각에 이르렀고

fuction solution (x) {
	var array = x.toString().split("")
	//여기서 구분자를 지정해주지 않고 "" 를 넣어주어야 ["1","5","0"] 로 쪼개져서 나온다! 
	var reducer = (accuulator,currentValue) => Number(accumulator) + Number(currentValue);
 	var result = array.reduce(reducer);
  	// 한번에 작성할 수도 있다.
  	// var result = array.reduce((accuulator,currentValue) => accumulator + currentValue)
} 

결과값을 돌려보니 6이 나왔다!! 👏👏👏

3. result % x === 0 이라면 true 아니라면 false !

if문을 사용해서 코드를 치던 도중... 다른 문제들을 풀었을 때 사람들이 사용하던 삼항연산자를 나도 이제는 한번 써볼까? 라는 생각이 들었고 삼항연산자를 이용해서 작성해주었다! 요건 아주 쉽게 작성할 수 있찌!

✨ 완성된 나의 코드


이렇게 제출하고 나서 조금 더 예쁘게 코드를 고쳐볼 수 없을까 하는 생각이 들었고,
다른사람들의 풀이를 보니 Number 가 아니라 parseInt를 이용해서도 타입변환이 되길래 새로 한번 더 아래처럼 작성해보았다!

훨씬 깔끔해보이죵? 홀롤ㄹ롤ㄹ로

하샤드 수 풀이 끝 ~! 👌

profile
후론트, 숨참고 딥 다이브

0개의 댓글