/**
* @param {number} numerator
* @param {number} denominator
* @return {string}
*/
var fractionToDecimal = function(numerator, denominator) {
// 음수 고려해야 함 처음에 못했음
let answer =''
if(numerator / denominator < 0) {
answer = '-'
numerator = Math.abs(numerator)
denominator = Math.abs(denominator)
}
if(numerator % denominator === 0) {
answer += numerator / denominator
return answer;
}
let memo = []
let divisor = BigInt(numerator) / BigInt(denominator)
answer += divisor + '.'
numerator = numerator % denominator
let check= answer.length
let idx;
memo.push(numerator);
numerator *= 10;
while(1) {
// BigInt는 알아서 소수점을 버리므로 parseInt 필요 X
const divisor = BigInt(numerator) / BigInt(denominator)
const reminder = BigInt(numerator) % BigInt(denominator)
idx = memo.indexOf(reminder)
answer += divisor;
if(idx !== -1) {
// 소수 중복되는 부분 괄호 처리
answer = answer.split('')
answer.splice(check+idx,0,'(');
answer = answer.join('') + ')';
break;
} else {
if(reminder === 0n) break;
memo.push(reminder)
}
numerator = BigInt(reminder) * BigInt(10);
}
return answer;
};
신경써야하는 게 많은 문제였다. 그리고 코드가 너무 지저분한거 같아서 아쉬운데 ㅠㅠ 아는 형이 푼 코드 만약 받으면 좀 비교하면서 고쳐봐야겠다. 그리고 BigInt
를 거의 사용 안해봤는데 덕분에 사용할 수 있었다. 틀리면 알려주는 케이스에 따라서 코드를 수정했는데 다음에는 좀 더 다양한 케이스를 한번에 처리할 수 있게 구현해봐야겠다.