๐ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค 2022 KAKAO BLIND RECRUITMENT ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ
๊ตฌํํด์ผ ํ๋ ๊ฒ์
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์ ์ ์ฒด ์ ๊ณ ๋ชฉ๋ก(report
)์์ 1๏ธโฃ์ ์ ๋ณ๋ก ๋ณธ์ธ์ด ์ ๊ณ ํ ๊ธฐ๋ก์ ์ ์ฅํ๊ณ 2๏ธโฃ๊ฐ ์ ์ ๊ฐ ์ ๊ณ ๋นํ ํ์๋ฅผ ๊ฐ๊ฐ ๊ธฐ๋กํด๋๋ค.
๊ฒ์ํ ์ด์ฉ ์ ์ง ํ์(k
)์ ๋ถํฉํ๋ ์ด์ฉ์๋ค์ ํ์ธํ๊ณ ์ ์ ๋ณ๋ก ์ ๊ณ ํ ๊ธฐ๋ก์ด ๋ด๊ธด ๊ฐ์ฒด์์ ์ด์ฉ ์ ์ง ๋์์๊ฐ ์๋ค๋ฉด ๋ฉ์ผ ์ ์ก ํ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์ด๋ฅผ ์ ๋ฐฐ์ด์ ์ ์ฅ ํ ๋ฐํํ๋ค.
๐น ์๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function solution(id_list, report, k) {
//1๏ธโฃ์ ์ ๋ณ๋ก ๋ณธ์ธ์ด ์ ๊ณ ํ ๊ธฐ๋ก์ ์ ์ฅํ ๊ฐ์ฒด
let users = {};
//2๏ธโฃ๊ฐ ์ ์ ๊ฐ ์ ๊ณ ๋นํ ํ์๋ฅผ ์ ์ฅํ ๊ฐ์ฒด
let reportCount = {};
//์ ๊ณ ๋ชฉ๋ก์ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก Set ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์๋ค.
id_list.forEach((id) => {
users[id] = new Set();
});
//์ ์ฒด ์ ๊ณ ๋ชฉ๋ก์ ๋ฐ๋ณตํด์ ์ ์ ๋ณ ์ ๊ณ ๊ธฐ๋ก์ ์
๋ฐ์ดํธ
report.forEach((r) => {
//id : ์ ๊ณ ํ ์ฌ๋, reported : ์ ๊ณ ๋นํ ์ฌ๋
const [id, reported] = r.split(" ");
//๋์ผํ ์ ์ ๋ฅผ ์ ๊ณ ํ ๊ธฐ๋ก์ด ์๋์ง ์ฒดํฌ
if (!users[id].has(reported)) {
//์ ๊ณ ๊ธฐ๋ก์ด ์์ผ๋ฉด ์ ๊ณ ๊ธฐ๋ก์ ์ถ๊ฐํ๊ณ ์ ๊ณ ๋นํ ์ ์ ์ ์ ๊ณ ํ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
users[id].add(reported);
reportCount[reported] = (reportCount[reported] || 0) + 1;
}
});
return Object.keys(users).map((key) => {
const current = users[key];
let count = 0;
//์ ์ ๋ณ ์ ๊ณ ๊ธฐ๋ก์์ ๊ฒ์ํ ์ด์ฉ ์ ์ง ๋์์ ๋ถํฉํ๋ ์ ์ ๊ฐ ์์ผ๋ฉด count๋ฅผ ์ฆ๊ฐ
for (let r of current) {
if (reportCount[r] >= k) {
count++;
}
}
return count;
});
}
โณ๏ธ ๋ ์ข์ ํด๊ฒฐ์ฑ
ํ๋ก๊ทธ๋๋จธ์ค ๋ค๋ฅธ ์ฌ๋์ ํ์ด์์ ๊ฐ์ฅ ๋ง์ ์ข์์๋ฅผ ๋ฐ์ ์ฝ๋์ด๋ค. ์ค๋ณต๋ ์ ๊ณ ๋ชฉ๋ก์ ํ ๊ฑด์ผ๋ก ์ฒ๋ฆฌ๋๋๊น report์ ์ค๋ณต์ ์ ๊ฑฐ ํ ๋ค๋ฅธ ๋ก์ง์ ๊ตฌํํ์๋ค. ์ค๋ณต ์ ๊ฑฐ๋ Set์ ์ผ๊ณ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function solution(id_list, report, k) {
//์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด Set์ ์ฌ์ฉํ์๊ณ ๋ค์ ๋ฐฐ์ด๋ก ๋ณํ ํ split๋ก ์ ๊ณ ํ ์ ์ ์ ์ ๊ณ ๋นํ ์ ์ ๋ฅผ ๋ถ๋ฆฌํ์๋ค.
//[[ 'muzi', 'frodo' ]] ์ด๋ฐ ํํ๋ก ์ ๊ณ ๋ด์ฉ์ด ์ ์ฅ๋๋ค.
let reports = [...new Set(report)].map((a) => {
return a.split(" ");
});
let counts = new Map();
//์ ๊ณ ๋นํ ํ์๋ฅผ ์ ์ฅํ๋๋ฐ Map์ ์ด๊ธฐํํ์ง ์๊ณ || ์ฐ์ฐ์๋ก ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ค.
for (const bad of reports) {
counts.set(bad[1], counts.get(bad[1]) + 1 || 1);
}
let good = new Map();
//๋ฉ์ผ ์ ์ก ํ์๋ฅผ ์ ์ฅํ๋๋ฐ ์ ๊ณ ๋นํ ์ฌ๋์ ํ์๊ฐ k์ ๊ฐ๊ฑฐ๋ ํฌ๋ฉด ์ ๊ณ ํ ์ฌ๋์ ๋ฉ์ผ ์ ์ก ํ์๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
for (const report of reports) {
if (counts.get(report[1]) >= k) {
good.set(report[0], good.get(report[0]) + 1 || 1);
}
}
let answer = id_list.map((a) => good.get(a) || 0);
return answer;
}
๐ฉโ๐พ ์๋ก ์๊ฒ ๋์๊ฑฐ๋ ์ค์ํ ํฌ์ธํธ
๋ฐฐ์ด์ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
โญ๏ธ
Set
โ ์ค๋ณต ์ ๊ฑฐ๋ง์ ์ํด์ ์ ์ผ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.1 2
const report = ["ryan con", "ryan con", "ryan con", "ryan con"]; const reports = [...new Set(report)]; // ["ryan con"]
filter
1 2 3 4
const report = ["ryan con", "ryan con", "ryan con", "ryan con"]; const reports = report.filter((item, index) => { return report.indexOf(item) === index; }); //["ryan con"]
Map
1 2 3 4 5 6
const report = ["ryan con", "ryan con", "ryan con", "ryan con"]; const objUnique = {}; report.forEach((el) => { objUnique[el] = true; }); const arrUnique = Object.keys(objUnique); // ["ryan con"]