배열의 마지막 요소를 반환하면 되는 쉬운 문제였기 때문에, 알고리즘에 대한 이야기보다는 런타임에 대한 이야기를 다뤄볼까 합니다.
Array.prototype.last = function() {
if (this.length < 1) {
return -1;
}
return this[this.length - 1];
};
문제 풀이 첫 시도 때, Beats 86%라는 결과를 받았습니다.
'단순 입출력 문제인 줄 알았는데 입출력에도 알고리즘이 있는건가?', '혹시 코드 길이가 짧아지면 런타임도 줄어드나?' 하는 생각에 코드를 한 줄로 작성해 보았습니다.
Array.prototype.last = function() {
return (this.length === 0) ? -1 : this[this.length - 1];
};
오잉? 코드를 한 줄로 작성하니 오히려 런타임이 증가했습니다!
4번은 처음 작성한 코드, 5번은 두 번째로 작성한 코드를 다시 제출해본 결과입니다.
같은 코드임에도 처음 작성한 코드는 런타임이 증가하고 두 번째 코드는 런타임이 감소했네요.
https://www.reddit.com/r/leetcode/comments/wb56d5/same_code_vastly_different_run_time/
레딧에 런타임 관련 글이 올라와있습니다. 같은 코드더라도 런타임이 달라질 수 있다는 내용입니다.
런타임만 보고 제 알고리즘의 효율성을 생각했었는데, 시간 복잡도와 공간 복잡도를 공부해봐야겠습니다.