이런저런 IT 이야기

Programming Challenges #33 본문

Algorithm

Programming Challenges #33

이런저런 IT 이야기 2023. 5. 24. 13:17
반응형

초등학생들이 여러 자리 수의 덧셈을 배울 때는 한 번에 한 자리씩 오른쪽에서 왼쪽으로 계산하도록 배운다. 그런데 그 자리 숫자의 합이 10을 넘어갈 때 그 윗자리 숫자에 1을 더해주는 것을 배울때 많은 학생들이 힘들어 한다. 일련의 덧셈 문제가 주어졌을때 자리를 올리는 횟수를 세어서 선생님들이 학생들을 가르치는데 도움을 줄수 있는 프로그램을 만들어라

입력

각 행에는 열자리 미만의 부호가 없는 정수가 두개씩 입력된다. 마지막 줄에는 '0 0'이 입력된다.

 

코드

const noCarryTxT = 'No Carry Operation'
        const CarryTxT = 'Carry Operation'
        
        function calculateCarryOperations(input) {            
            let array = input.split('\n')            
            array = array.filter(e => {
                const suba = e.split('')
                return (parseInt(suba[0]) != 0 && parseInt(suba[1]) != 0)
            }).map(e => {
                const suba = e.split(' ')
                return [parseInt(suba[0]), parseInt(suba[1])]
            }).reduce((acc, cc, i, array) => {
                let result = ''
                let carry_count = countCarryOperations(cc[0], cc[1])
                if (carry_count > 0) {
                    result = carry_count+' '+CarryTxT
                } else {
                    result = noCarryTxT
                }
                acc.push(result)
                return acc
            }, [])            
            return array        
        }

        function countCarryOperations(arg1, arg2){
            let carry_count = 0;
            const arg1_arr = String(arg1).split('')
            const arg2_arr = String(arg2).split('')    
            if (arg1_arr.length > arg2_arr) {
                for (let i = 0; i < arg1_arr.length; i++) {
                    if (parseInt(arg1_arr[i])+parseInt(arg2_arr[i]) >= 10) {
                        carry_count = carry_count+1
                    }              
                }
            } else {
                for (let i = 0; i < arg2_arr.length; i++) {
                    if (parseInt(arg1_arr[i])+parseInt(arg2_arr[i]) >= 10) {
                        carry_count = carry_count+1
                    }                   
                }
            }
            return carry_count
        } 
        
        const input = '123 456
        555 555
        123 594
        0 0'
        const result = calculateCarryOperations(input)
        console.log(JSON.stringify(result))

 

출력

[
"No Carry Operation",
"3 Carry Operation",
"1 Carry Operation"
]

 

 

 

 

 

 

 

 

반응형