Skip to content

Commit f4b6f19

Browse files
Merge pull request #707 from jinoo0306/main
[조진우] 109차 라이브 코테 제출
2 parents 6e70e9c + 2de2c44 commit f4b6f19

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const input = require("fs")
2+
.readFileSync(
3+
process.platform === "linux"
4+
? "/dev/stdin"
5+
: require("path").join(__dirname, "input.txt"),
6+
"utf8"
7+
)
8+
.toString()
9+
.trim()
10+
.split("\n");
11+
12+
function solution(input) {
13+
const [N, M] = input[0].split(" ").map(Number);
14+
const an = input[1].split(" ").map(Number);
15+
16+
const count = Array(M).fill(0);
17+
let sum = 0;
18+
let result = 0;
19+
20+
count[0] = 1;
21+
22+
for (let i = 0; i < N; i++) {
23+
sum = (sum + an[i]) % M;
24+
25+
if (sum < 0) sum += M;
26+
27+
result += count[sum];
28+
count[sum]++;
29+
}
30+
31+
return result;
32+
}
33+
34+
console.log(solution(input));
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const input = require("fs")
2+
.readFileSync(
3+
process.platform === "linux"
4+
? "/dev/stdin"
5+
: require("path").join(__dirname, "input.txt"),
6+
"utf8"
7+
)
8+
.trim()
9+
.split("\n");
10+
11+
function lowerBound(arr, target) {
12+
let left = 0,
13+
right = arr.length;
14+
while (left < right) {
15+
const mid = Math.floor((left + right) / 2);
16+
if (arr[mid] >= target) right = mid;
17+
else left = mid + 1;
18+
}
19+
return left;
20+
}
21+
22+
function upperBound(arr, target) {
23+
let left = 0,
24+
right = arr.length;
25+
while (left < right) {
26+
const mid = Math.floor((left + right) / 2);
27+
if (arr[mid] > target) right = mid;
28+
else left = mid + 1;
29+
}
30+
return left;
31+
}
32+
33+
function solution(input) {
34+
const dots = input[1]
35+
.split(" ")
36+
.map(Number)
37+
.sort((a, b) => a - b);
38+
const lines = input.slice(2).map((line) => line.split(" ").map(Number));
39+
const result = [];
40+
41+
for (let [a, b] of lines) {
42+
const count = upperBound(dots, b) - lowerBound(dots, a);
43+
result.push(count);
44+
}
45+
46+
return result.join("\n");
47+
}
48+
49+
console.log(solution(input));

0 commit comments

Comments
 (0)