오늘 기이한 경험을 했다.
https://www.acmicpc.net/problem/10825
단순 백준 정렬문제를 풀고 있었는데,
시간초과가 발생한 것이다.
도저히 시간초과가 발생한 것이 이해되지 않아서 python으로 정답을 빠르게 맞추고 javascript로 풀이한 코드를 보았다.
코드는 비슷했다.
차이가 있다면 한줄 한줄 console.log() 으로 출력한 것이 아니고, 정답값들을 문자열 1개에 모아서 한번에 출력하고 있었다.
나도 for문마다 console.log를 호출하는 것이 아니라, 1번만 호출해보았는데 바로 통과했다.
=> 즉, 매 for문 마다 console.log()를 돌리는 것은 비효율적이다!
https://stackoverflow.com/questions/2934509/exclude-debug-javascript-code-during-minification
위 링크에도 나와있는데, console.log는 디버깅용으로 쓰는 함수라서 사용할 때 속도가 저하될 수 있다고 한다. :)
javascript로 ps를 할 때, 꼭 고려하도록 하자!
시간초과 코드
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const solution = (students) => {
students = students.map(student => {
const res = student.split(" ");
res[1] = parseInt(res[1]);
res[2] = parseInt(res[2]);
res[3] = parseInt(res[3]);
return res;
});
students.sort(
(a, b) => {
if (a[1] !== b[1]) {
return -(a[1] - b[1]);
} else if (a[2] !== b[2]) {
return (a[2] - b[2]);
} else if (a[3] !== b[3]) {
return -(a[3] - b[3]);
} else {
if (a[0] < b[0]) {
return -1;
} else if (a[0] > b[0]) {
return 1;
} else {
return 0;
}
}
}
);
for (let i = 0; i < students.length; i++) {
console.log(students[i][0]);
}
}
const input = [];
rl.on("line", function(line) {
input.push(line);
}).on("close", function() {
solution(input.slice(1));
process.exit();
});
통과 코드
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const solution = (students) => {
students = students.map(student => {
const res = student.split(" ");
res[1] = parseInt(res[1]);
res[2] = parseInt(res[2]);
res[3] = parseInt(res[3]);
return res;
});
students.sort(
(a, b) => {
if (a[1] !== b[1]) {
return -(a[1] - b[1]);
} else if (a[2] !== b[2]) {
return (a[2] - b[2]);
} else if (a[3] !== b[3]) {
return -(a[3] - b[3]);
} else {
if (a[0] < b[0]) {
return -1;
} else if (a[0] > b[0]) {
return 1;
} else {
return 0;
}
}
}
);
let answer = "";
for (let i = 0; i < students.length; i++) {
answer += `${students[i][0]}\n`;
}
console.log(answer);
}
const input = [];
rl.on("line", function(line) {
input.push(line);
}).on("close", function() {
solution(input.slice(1));
process.exit();
});
'개발 > Javascript' 카테고리의 다른 글
[Javascript] 우선순위 큐 활용하여 문제 풀기 (1927 최소힙) (0) | 2020.11.29 |
---|---|
[Javascript] 자바스크립트의 "use strict"는 도대체 무엇일까? (0) | 2020.11.29 |
[Javascript] 자바스크립트 map() vs foreach() 비교하기 (0) | 2020.11.28 |
[Javascript] Array to Set / Set to Array (0) | 2020.11.27 |
2588 곱셈 (백준 자바스크립트 입출력 연습) (0) | 2020.11.24 |