매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
프로그래머스 우박수열 정적분 자바스크립트.
거의 1시간을 디버깅에 쏟은 것 같은데, 오히려 잘됐다 싶었다.
비록 자바 언어로 풀지는 못했지만 정적분이라 하여 괜시리 쫄 필요 없다는 생각도 들었고,
어쨌든 자꾸 시간초과가 될 것 같은 코드라도 한번 더 생각해서 쳐보자는게 목표이므로.
분명히 테스트 케이스는 통과했는데 실행해보니 놀랍게도 테스트 케이스'만' 통과하는 코드를 짬.
뭐지? 싶어서 계속 살펴봤는데 뭘 잘못했는지 몰라 근 한시간 동안 디버깅만 한 것 같다.
다 포기하고 걍 때려쳐!! 할 무렵 눈에 들어온 잘못된 변수 하나...ㅎ....
오프셋이니 정적분이니 움찔하는 단어들 때문에 약간 쫄긴 했고,
너무 시간이 오래 걸려 다른 사람들의 풀이를 봤는데 영 이해가 안되었을 뿐더러 나와 같은 논리인데도 되는 사람들의 논리를 확인하고 나니 더더욱 디버깅을 해봐야겠다는 생각이 들었다.
어쨌든, 찐 정적분 느낌으로 푼 사람들의 풀이보다는 효율성이 낮은 코드 같지만 해결은 됐다.
function collatzArray(number) {
const array = [];
array.push(number);
let inputNumber = number;
while (true) {
if (inputNumber % 2 === 0) {
inputNumber /= 2;
array.push(inputNumber);
if (inputNumber === 1) {
break;
}
}
if (inputNumber % 2 !== 0) {
inputNumber = inputNumber * 3 + 1;
array.push(inputNumber);
}
}
return array;
}
function calculateArea(collatzNumbers) {
const array = [];
for (let i = 1; i < collatzNumbers.length; i += 1) {
const area = (collatzNumbers[i - 1] + collatzNumbers[i]) / 2;
array.push(area);
}
return array;
}
function integral(number, areasArray, rangesArray) {
const result = [];
for (let i = 0; i < rangesArray.length; i += 1) {
const picked = rangesArray[i];
const start = picked[0];
const end = areasArray.length + picked[1];
if (end < start) {
result.push(-1);
continue;
}
if (end === start) {
result.push(0);
continue;
}
const slicedArray = areasArray.slice(start, end);
result.push(slicedArray.reduce((pre, cur) => pre + cur, 0));
}
return result;
}
function solution(k, ranges) {
const array = collatzArray(k);
const areas = calculateArea(array);
return integral(k, areas, ranges);
}
파이썬으로 코테 푸는 사람들이 많기도 하고 코테를 위해서 파이썬을 따로 배우는 사람들도 있는 것 같은데..
나중에 기회가 되면 파이썬도 좀 고려는 해보고 싶긴 하다.
하지만 자바스크립트도 완벽하게 할 수 없는 상태에서는 욕심데쓰.