Skip to content

Commit 395db81

Browse files
committed
[Silver IV] Title: 숫자 카드 2, Time: 1644 ms, Memory: 223728 KB -BaekjoonHub
1 parent d6c0938 commit 395db81

2 files changed

Lines changed: 41 additions & 49 deletions

File tree

백준/Silver/10816. 숫자 카드 2/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 158416 KB, 시간: 612 ms
7+
메모리: 223728 KB, 시간: 1644 ms
88

99
### 분류
1010

11-
이분 탐색, 자료 구조, 해시를 사용한 집합과 맵, 정렬
11+
자료 구조, 정렬, 이분 탐색, 해시를 사용한 집합과 맵
1212

1313
### 제출 일자
1414

15-
2024년 3월 29일 14:00:39
15+
2026년 2월 23일 21:56:34
1616

1717
### 문제 설명
1818

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,55 @@
1-
/* /dev/stdin */
2-
let fs = require('fs');
3-
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
1+
// /dev/stdin
2+
const fs = require("fs");
3+
let input = fs
4+
.readFileSync("/dev/stdin")
5+
.toString()
6+
.split("\n")
7+
.map((x) => x.replace("\r", ""));
48

59
const N = Number(input[0]);
6-
const arrN = input[1].split(' ').map(Number);
10+
const numberCards = input[1].split(" ").map(Number);
711
const M = Number(input[2]);
8-
const arrM = input[3].split(' ').map(Number);
12+
let myCards = input[3]
13+
.split(" ")
14+
.map(Number)
15+
.sort((a, b) => a - b);
916

10-
arrN.sort((a, b) => a - b);
17+
const maps = new Map();
1118

12-
let answer = '';
13-
14-
for(let i = 0; i < M; i++){
15-
const lower = lowerBound(arrN, arrM[i], 0, N);
16-
const upper = upperBound(arrN, arrM[i], 0, N);
17-
18-
answer += (upper - lower) + ' ';
19+
for (const key of myCards) {
20+
maps[key] = 0;
1921
}
2022

21-
console.log(answer)
22-
23-
24-
25-
26-
27-
28-
29-
30-
31-
23+
let answer = "";
3224

33-
34-
35-
36-
37-
38-
function lowerBound (arr, target, start, end) {
39-
while(start < end) {
40-
let mid = parseInt((start + end) / 2);
41-
if(arr[mid] >= target) {
42-
end = mid;
43-
} else {
44-
start = mid + 1;
45-
}
25+
for (const x of numberCards) {
26+
const result = binarySearch(myCards, x);
27+
if (result === 1) {
28+
maps[x]++;
4629
}
47-
return end;
4830
}
4931

32+
function binarySearch(cards, target) {
33+
let left = 0;
34+
let right = cards.length - 1;
5035

36+
while (left <= right) {
37+
const mid = Math.floor((left + right) / 2);
5138

52-
53-
function upperBound (arr, target, start, end) {
54-
while(start < end) {
55-
let mid = parseInt((start + end) / 2);
56-
if(arr[mid] > target) {
57-
end = mid;
39+
if (cards[mid] === target) {
40+
return 1;
41+
} else if (cards[mid] < target) {
42+
left = mid + 1;
5843
} else {
59-
start = mid + 1;
44+
right = mid - 1;
6045
}
6146
}
62-
return end;
47+
48+
return 0;
6349
}
50+
myCards = input[3].split(" ").map(Number);
51+
for (const number of myCards) {
52+
answer += maps[number] + " ";
53+
}
54+
55+
console.log(answer);

0 commit comments

Comments
 (0)