Skip to content

Commit 5c14417

Browse files
committed
[BOJ] 1744 수 묶기 (G4)
1 parent b3489bb commit 5c14417

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

최어진/11주차/260311.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/* 백준 1744번 수 묶기 (3회차) */
2+
3+
const fs = require('fs');
4+
const lines = fs.readFileSync('/dev/stdin').toString().split('\n');
5+
let ptr = 0;
6+
const input = () => lines[ptr++];
7+
8+
// N <= 50
9+
const N = Number(input());
10+
11+
// -10^3 <= numbers[i] <= 10^3
12+
const numbers = Array.from({ length: N }, () => Number(input()));
13+
numbers.sort((a, b) => a - b);
14+
15+
// 포인트
16+
// 1. 수열의 모든 수는 묶거나 묶지 않을 수 있음
17+
// 2. 묶은 경우는 2개를 곱해서 더함
18+
19+
// 관찰 포인트
20+
// 1. 음수는 두 개를 곱해서 더하는 게 나음
21+
// 2. -1, 0, 1, 음수, 양수를 나누는 게 좋을 듯
22+
23+
let answer = 0;
24+
25+
// 모든 양수 곱해서 빼기
26+
while (numbers.length >= 2 && numbers[numbers.length - 2] > 1) {
27+
answer += numbers[numbers.length - 2] * numbers[numbers.length - 1];
28+
numbers.pop();
29+
numbers.pop();
30+
}
31+
// 1은 무조건 더하는 게 이득
32+
while (numbers.length > 0 && numbers[numbers.length - 1] > 0) {
33+
answer += numbers.pop();
34+
}
35+
// 0은 개수만 세주고 배열에서 전부 제거
36+
let zero_cnt = 0;
37+
while (numbers.length > 0 && numbers[numbers.length - 1] === 0) {
38+
zero_cnt++;
39+
numbers.pop();
40+
}
41+
42+
// 모든 음수 곱해서 빼기
43+
numbers.reverse();
44+
45+
while (numbers.length >= 2 && numbers[numbers.length - 2] <= -1) {
46+
answer += numbers[numbers.length - 2] * numbers[numbers.length - 1];
47+
numbers.pop();
48+
numbers.pop();
49+
}
50+
while (numbers.length > 0 && zero_cnt > 0) {
51+
numbers.pop();
52+
zero_cnt--;
53+
}
54+
numbers.forEach((number) => {
55+
answer += number;
56+
});
57+
58+
// console.log(numbers);
59+
console.log(answer);

0 commit comments

Comments
 (0)