프로그래머스 [문자 반복 출력하기]
"hello" , 5 면 "hhhhheeeeellllllllllooooo" 로 바꾸는 문제
코드를 어떻게 짤까 생각을 정리해봤다.
1) 각 문자열 을 나눠서
2) * 5 씩 해준다.
3) 반복문 + repeat() 함수를 사용한다.
const my_srting = "hello"
const n = 5
function solution(my_srting,n) {
let answer = ''
for (let i = 0; i < my_srting.length; i++) {
answer += my_srting[i].repeat(n); //각 배열마다 n 번씩 반복
}
return answer
}
프로그래머스 [자릿수 더하기]
12345 => 10
123456 => 16
으로 만들기 위해서 코드를 어떻게 짜야할까...
일단 1 + 2 + 3 + 4 + 5 로 만들어야하는데
내가 생각한방법은
1) 각 숫자를 배열로 만든다
2) 배열[index] 를 모두 더한다
그런데 여기서 숫자열을 배열로 바꾸려면
숫자열을 문자열로 바꾼다음 배열로 바꿔야한다. ( 숫자열 -> 배열로 바로 바꿀 수가 없음 )
여기서 문제는 문자열 + 문자열이 된 숫자 ("1" + "2") 는 ("12") 가 되기 때문에 다시 숫자열로 바꿔 줘야 한다.
그런 다음 반복문을 돌려서 답을 만들었다.
const n = 1234
function solution(n) {
const str = String(n) // 숫자열을 문자열로 변환
const newArr = Array.from(str, (arg) => Number(arg)) // 문자열 로 변환 된 값을 배열로 바꾸면서 다시 숫자열로 바꿈 ["1","2","3"] 을 [1,2,3] 으로 바꿨다는 말
let answer = 0
for (let i = 0; i < newArr.length; i++) {
answer = answer + newArr[i]; // 반복문을 돌려서 [1] + [2] + [3] 의 합을 구함
}
return answer
}
console.log(solution(n))
아무튼 정답을 맞췄으니 ... 다른 사람들의 풀이도 봤는데 세상에나 !
function solution(n) {
return n.toString().split('').map(e => e*1).reduce((a, b) => a + b , 0);
}
console.log(solution(n));
이렇게 짧고 아름답게 코딩을 하였다.
하나하나 뜯어보니
n.toString() ==> n값을 문자열로 반환한다. 숫자열 1234 를 문자열 1234로 바꿈
.split(' ') ==> 바뀐 문자열을 배열로 쪼갠다. 문자열 1234 를 [ '1', '2', '3', '4' ] 로 바꿈
.map(e => e*1) ==> 콜백함수를 이용하여 배열의 각 요소를 숫자열로 다시 바꾼다 [ '1', '2', '3', '4' ] 를 [ 1, 2, 3, 4 ] 로 바꿈
.reduce((a, b) => a + b, 0) ==> 콜백함수를 이용하여 각 배열의 값을 더한다 , 0은 0번째 인덱스 부터 시작한다
[1,2,3,4] ==> 1 + 2 + 3 + 4
코드가 아름답다고 하는게 이런것인가.. 라고 느낀 하루였다..
'개발 일지 > 개발 일지' 카테고리의 다른 글
내일배움캠프 Day 15 (0) | 2022.11.18 |
---|---|
내일배움캠프 Day 14 (0) | 2022.11.18 |
내일배움캠프 Day 11 (0) | 2022.11.14 |
내일배움캠프 Week 2 (0) | 2022.11.14 |
내일배움캠프 Day 10 (1) | 2022.11.11 |