https://www.acmicpc.net/problem/2685
오랜만에 알고리즘 문제를 풀었다. 쉬운걸로 골라서 풀었다. 캐리가 발생하면 무시해주고 일의 자리만 계산에 반영하면 끝나는 쉬운 문제이다. 처음으로 스프레드 연산자를 이용하여 알고리즘 문제를 풀었다.
const readline = require('readline')
let T = 0
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const parseValue = (line) => {
return line.split(' ').map(x => { return parseInt(x) })
}
const pipe = (...fns) => value => fns.reduce((acc, fn) => fn(acc), value)
const make_Nim = (num, N, arr) =>{
while(num) {
arr.unshift(num % N)
num = Math.floor(num / N)
}
}
const solution = (B, X, Y) => {
const X_arr = [], Y_arr = []
make_Nim(X, B, X_arr)
make_Nim(Y, B, Y_arr)
const num = Math.abs(X_arr.length - Y_arr.length)
if(X_arr.length > Y_arr.length) {
for(let i = 0; i < num; i++) {
Y_arr.unshift(0)
}
}
else if(X_arr.length < Y_arr.length) {
for(let i = 0; i < num; i++) {
X_arr.unshift(0)
}
}
const ans = X_arr.reduce((acc, curr, idx) => {
const res = ((curr) + Y_arr[idx]) % B
acc.push(res)
return acc
}, []).reverse().reduce((acc, curr, idx) => {
acc += curr * Math.pow(B, idx)
return acc
}, 0)
console.log(ans)
}
rl.on('line', line => {
if(T === 0) {
T = parseInt(line)
}
else {
const res = pipe(
x => parseValue(x),
x => solution(...x)
)(line)
T--
}
if(T === 0) {
rl.close()
}
}).on('close', _ =>{
process.exit()
})
'백준' 카테고리의 다른 글
백준16922 - 로마 숫자 만들기 (0) | 2021.01.26 |
---|---|
백준12904 - A와 B (0) | 2021.01.25 |
백준2980 - 도로와 신호등 (0) | 2020.08.09 |
백준14562 - 태권왕 (0) | 2020.08.06 |
백준4470 - 줄번호 (0) | 2020.08.06 |