이런저런 IT 이야기
Programming Challenges #33 본문
반응형
초등학생들이 여러 자리 수의 덧셈을 배울 때는 한 번에 한 자리씩 오른쪽에서 왼쪽으로 계산하도록 배운다. 그런데 그 자리 숫자의 합이 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"
]
반응형
'Algorithm' 카테고리의 다른 글
버블 정렬 알고리즘 (Bubble Sort Algorithm) (0) | 2023.05.24 |
---|---|
Programming Challenges #34 (0) | 2023.05.24 |
Programming Challenges #32 (0) | 2023.05.24 |
Big O 표기법을 그래프로 표현 (0) | 2023.05.24 |
알고리즘의 시간 복잡도를 나타내는 표기 방법 (0) | 2023.05.24 |