https://school.programmers.co.kr/learn/courses/30/lessons/92334?utm_source=chatgpt.com
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
1. ๋ฌธ์ ํ์ด
1-1 ๋ฌธ์ ์ค๋ช
์ด๋ฌธ์ ๋ ์ ์ ๋ค์ด ์๋ก๋ฅผ ์ ๊ณ ํ ๊ธฐ๋ก์ด ์ฃผ์ด์ก์ ๋,
- ํ ์ ์ ๊ฐ ๊ฐ์ ์ ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ์ ๊ณ ํด๋ 1๋ฒ๋ง ์ธ์
- k๋ฒ ์ด์ ์ ๊ณ ๋นํ ์ ์ ๋ ์ ์ง
- ์ ์ง๋ ์ ์ ๋ฅผ ์ ๊ณ ํ ์ฌ๋์๊ฒ๋ง ๋ฉ์ผ ๋ฐ์ก
๊ฐ ์ ์ ๊ฐ ์ต์ข ์ ์ผ๋ก ๋ช ๊ฐ์ ๋ฉ์ผ์ ๋ฐ๋์ง ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
1-2 ๋ฌธ์ ์ ๊ทผ๋ฐฉ์
1. ์ค๋ณต ์ ๊ณ ์ ๊ฑฐ
๊ฐ์ ์ฌ๋์ด ๊ฐ์ ์ฌ๋์ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํด๋ 1๋ฒ๋ง ์ธ์ ๋๋ฏ๋ก
๋จผ์ report ๋ฐฐ์ด์ ์ค๋ณต์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
2. ๋๊ฐ ๋ช๋ฒ ์ ๊ณ ๋นํ๋์ง ๊ณ์ฐ
์ค๋ณต ์ ๊ฑฐ๋ ์ ๊ณ ๋ชฉ๋ก์ ๋๋ฉด์
- ์ ๊ณ ํ ์ฌ๋์ ๋๊ตฌ์ธ์ง
- ์ ๊ณ ๋นํ ์ฌ๋์ ๋๊ตฌ์ธ์ง
๋ถ๋ฆฌํด์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
- ๊ฐ ์ ์ ๊ฐ ๋๊ตฌ๋ฅผ ์ ๊ณ ํ๋์ง
- ๊ฐ ์ ์ ๊ฐ ๋ช ๋ฒ ์ ๊ณ ๋นํ๋์ง
4. ์ ๊ณ ๋นํ ํ์๊ฐ k ์ด์์ธ ์ ์ ๋ง ์ ์ง๋ฉ๋๋ค.
๊ทธ ํ ๊ฐ ์ ์ ๊ฐ ์ ๊ณ ํ ์ฌ๋๋ค ์ค
์ค์ ๋ก ์ ์ง๋ ์ฌ๋์ด ๋ช ๋ช
์ธ์ง ์ธ๋ฉด,
๊ทธ ์๊ฐ ๊ณง ํด๋น ์ ์ ๊ฐ ๋ฐ๋ ๋ฉ์ผ ์๊ฐ ๋ฉ๋๋ค.
1-3. ํ์ด ์์ด๋์ด ์ ๋ฆฌ
์ ์ฒด ํ๋ฆ์ ์๋์ ๊ฐ์ต๋๋ค.
- id_list๋ก ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ฐ์ฒด ์์ฑ
- report ๋ฐฐ์ด์ Set์ผ๋ก ์ค๋ณต ์ ๊ฑฐ
- ์ ๊ณ ๊ธฐ๋ก์ ์ํํ๋ฉฐ
- ์ ๊ณ ํ ์ฌ๋์ ์ ๊ณ ๋ชฉ๋ก์ ์ถ๊ฐ
- ์ ๊ณ ๋นํ ์ฌ๋์ ์ ๊ณ ํ์ ์ฆ๊ฐ
- ์ ๊ณ ํ์๊ฐ k ์ด์์ธ ์ฌ๋์ ์ ์ง ๋ชฉ๋ก์ ์ ์ฅ
- ๊ฐ ์ ์ ๊ฐ ์ ๊ณ ํ ์ฌ๋๋ค ์ค ์ ์ง๋ ์ฌ๋์ด ๋ช ๋ช ์ธ์ง ์ธ์ ๋ฐฐ์ด ๋ฐํ
2. ์ ๋ต ์ฝ๋
function solution(id_list, report, k) {
// ์ ์ ๋ณ ์ ๊ณ ๋นํ ํ์, ์ ๊ณ ํ ๋์ ๋ฆฌ์คํธ ๊ฐ์ฒด๋ก ์์ฑ
const userMap = id_list.reduce((acc, user) => {
acc[user] = {
reportedCount: 0,
reportList: []
};
return acc;
}, {});
// ์ ๊ณ ํ ๋ด์ญ์์ ์ค๋ณต ์ ๊ฑฐ
const uniqueReport = [...new Set(report)];
// ์ ๊ณ ๋ด์ญ์ ๊ธฐ์ค์ผ๋ก ์ ๊ณ ๋นํ ์ฌ๋์ ์นด์ดํธ ๋์ , ์ ๊ณ ํ ์ฌ๋์ ๋๊ตฌ๋ฅผ ์ ๊ณ ํ๋์ง ๊ธฐ๋ก
for (const item of uniqueReport) {
const [from, to] = item.split(" ");
userMap[from].reportList.push(to);
userMap[to].reportedCount++;
}
const banned = new Set();
// k๋ฒ์ด์ ์ ๊ณ ๋์ ์ ์ง๋ ์ฌ๋๋ค ๋ฆฌ์คํธ
for (const user of id_list) {
if (userMap[user].reportedCount >= k) {
banned.add(user);
}
}
// ๊ฐ๋ณ์ ์ ๋ค์ ์ ๊ณ ๋ฆฌ์คํธ์ ์ ์ง๋ ์ฌ๋์ด ์๋์ง ํ์ธํ์ฌ ๋ฉ์ผ ๋ฐ์ก ์นด์ดํธ ์ธก์
const answer = id_list.map((user) => {
let count = 0;
for (const target of userMap[user].reportList) {
if (banned.has(target)) count++;
}
return count;
});
return answer;
}
3. ์์์ผ ํ ๋ฉ์๋ / ๋ฌธ๋ฒ
reduce()
const userMap = id_list.reduce((acc, user) => {
acc[user] = {
reportedCount: 0,
reportList: []
};
return acc;
}, {});
๋ฐฐ์ด์ ์ํํ๋ฉด์ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋์ ํด์ ๋ง๋๋ ๋ฉ์๋์ ๋๋ค.
์ด ๋ฌธ์ ์์๋ id_list๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ์ต๋๋ค.
Set
const uniqueReport = [...new Set(report)];
Set์ ์ค๋ณต ์๋ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ด ๋ฌธ์ ์์๋
- ์ ๊ณ ๊ธฐ๋ก ์ค๋ณต ์ ๊ฑฐ
- ์ ์ง๋ ์ ์ ๋ชฉ๋ก ์ ์ฅ
๋ ๊ณณ์์ ์ฌ์ฉ๋ฉ๋๋ค.
split()
const [from, to] = item.split(" "); // "muzi frodo".split(" "); -> ["muzi", "frodo"]
๋ฌธ์์ด์ ํน์ ๊ธฐ์ค์ผ๋ก ๋๋๋ ๋ฉ์๋์ ๋๋ค.
map()
const answer = id_list.map((user) => {
...
});
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ณํํด์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋๋ ๋ฉ์๋์ ๋๋ค.
์ด ๋ฌธ์ ์์๋ ๊ฐ ์ ์ ๊ฐ ๋ฐ์ ๋ฉ์ผ ์๋ฅผ ๊ณ์ฐํด์
์ต์ข
๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ์ต๋๋ค.
for...of
for (const item of uniqueReport) {
๋ฐฐ์ด์ด๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๊ฐ์ ํ๋์ฉ ๊บผ๋ด๋ ๋ฐ๋ณต๋ฌธ์ ๋๋ค.
์ด ๋ฌธ์ ์์๋ ์ ๊ณ ๋ชฉ๋ก์ด๋ ์ ๊ณ ๋์ ๋ชฉ๋ก์ ์ํํ ๋ ์ฌ์ฉํ์ต๋๋ค.
has()
banned.has(target)
Set ์์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ๋ฉ์๋์ ๋๋ค.
- ์์ผ๋ฉด true
- ์์ผ๋ฉด false
์ฆ, ์ ๊ณ ํ ์ฌ๋์ด ์ค์ ์ ์ง๋ ์ฌ๋์ธ์ง ํ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค.