코딩 테스트를 진행하다 보면 이상하게 시간 초과가 발생하는 일이 있습니다.
그럴 때 console.log()를 많이 사용했는지 확인해보아야 합니다.
출력이 많은 문제의 경우 console.log()를 많이 사용했을 때 시간 초과가 발생하는 경우가 있습니다.
예를 들어 백준의 28278번
// 시간 초과 코드
const input = require("fs")
.readFileSync("dev/stdin")
.toString()
.trim()
.split("\n");
const N = Number(input[0]);
const stk = [];
const cmd = {
1: (x) => {
stk.push(x);
},
2: () => {
console.log(stk.length ? stk.pop() : -1);
},
3: () => {
console.log(stk.length);
},
4: () => {
console.log(stk.length ? 0 : 1);
},
5: () => {
console.log(stk.length ? stk[stk.length - 1] : -1);
},
};
for (let i = 1; i < input.length; i++) {
const str = input[i];
if (str[0] == 1) {
const [_, x] = str.split(" ");
cmd[1](Number(x));
} else {
cmd[str[0]]();
}
}
// 맞은 코드
const input = require("fs")
.readFileSync("dev/stdin")
.toString()
.trim()
.split("\n");
const N = Number(input[0]);
const stk = [];
let ret = "";
const cmd = {
1: (x) => {
stk.push(x);
},
2: () => stk.length ? stk.pop() : -1,
3: () => stk.length,
4: () => stk.length ? 0 : 1,
5: () => stk.length ? stk[stk.length - 1] : -1,
};
for (let i = 1; i < input.length; i++) {
const str = input[i];
if (str[0] == 1) {
const [_, x] = str.split(" ");
cmd[1](Number(x));
} else {
ret += cmd[str[0]]();
ret += '\n';
}
}
console.log(ret.trim());
큰 로직의 변경 없이 단순하게 ret이라는 문자열 변수를 두고 결과를 해당 변수에 저장해서 한 번에 출력하면 시간 초과 문제가 해결됩니다.
추가로 문자열 변수가 아니더라도 배열을 변수로 두고 join('\n')을 통해서 해결하는 방법도 있습니다.
'알고리즘&코테' 카테고리의 다른 글
[자료구조/미완] Linked List(연결리스트) with JS (0) | 2025.05.14 |
---|---|
[자료구조] Deque with JS (0) | 2025.05.09 |
[알고리즘] 에라토스테네스의 체 in JS(Refactoring) (0) | 2025.04.28 |
[코테 꿀팁] 배열의 원소 찾기에서 시간 초과가 나온다면? Set.has() 생각하기 (1) | 2025.04.14 |
[코테 꿀팁] JS 코딩 테스트 (0) | 2025.03.20 |