본문 바로가기

개발 일지/개발 일지

내일배움캠프 Day 13

프로그래머스 [문자 반복 출력하기]

"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