DevYoon
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (Javascript) ๋ณธ๋ฌธ
link ๐ https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=javascript
๐ญ A ์ ์ ๊ฐ B ์ ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํ์ ๊ฒฝ์ฐ 1๋ฒ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ค๋ณต์ฒดํฌํด์ค์ผ ํจ โก๏ธ array๋ฅผ set์ผ๋ก ๋ง๋ค์ด ์ค๋ณต ์ฒ๋ฆฌ
๐ญ C ์ ์ ๊ฐ k๋ฒ ์ด์ ์ ๊ณ ๋นํ๋ค๋ฉด, C ์ ์ ๋ฅผ ์ ๊ณ ํ๋ ์ ์ ๋ค์๊ฒ ๋ฉ์ผ์ ๋ณด๋ด์ค์ผ ํจ
๐ญ ์ ๋ถ๋ถ์ ์ฒ์์ ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ๋ ค ํ๋ค.
1. user ๊ฐ์ฒด์ user๋ณ๋ก ์ ๊ณ ํ ํ ์ ์ ๋ฐฐ์ด์ value๋ก ๋ด์์ค๋ค. ex) { muzi : [frodo, apeach] }
2. report_cnt ๊ฐ์ฒด์ user๋ณ๋ก ์์ ์ด ์ ๊ณ ๋นํ ํ์๋ฅผ value๋ก ๋ด์์ค๋ค. ex) { frodo : 2 }
3. report_cnt ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉฐ ํ์๊ฐ k๋ฒ ์ด์์ธ ๊ฒ์ ์ฐพ์ freeze ๋ฐฐ์ด์ ๋ด๋๋ค.
4. freez ๋ฐฐ์ด๊ณผ user ๊ฐ์ฒด๋ฅผ ์ด์ค์ผ๋ก ์ํํ๋ฉด์, freez ๋ฐฐ์ด์ ๋ค์ด ์๋ ์ ์ ๊ฐ user ๊ฐ์ฒด์ A ์ ์ ์ value์ ๋ค์ด ์๋ค๋ฉด, A ์ ์ ์ ๋ฉ์ผ ์์ ํ์๋ฅผ 1 ์ฆ๊ฐ์์ผ์ค๋ค.
๐ญ ๊ทธ๋ฐ๋ฐ ๋ก์ง์ด ๋๋ฌด ๋ณต์กํ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
1. reported ๊ฐ์ฒด์ user๋ณ๋ก ์์ ์ ์ ๊ณ ํ ํ ์ ์ ๋ฅผ ๋ฐฐ์ด๋ก ๋ด๋๋ค. ex) { frodo : [muzi, apeach] }
2. reported ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉฐ value์ ๊ธธ์ด๊ฐ k ์ด์์ด๋ฉด, value์ ์ํ ์ ์ ๋ค์ ๋ฉ์ผ ์์ ํ์๋ฅผ +1 ํด์ค๋ค.
function solution(id_list, report, k) {
var answer = [];
let reported = {};
let get_mail = {};
/* ๋ฉ์ผ ๋ฐ์ ํ์๋ฅผ ๊ฐ์ฒด๋ก ์์ฑ */
id_list.map((user) => get_mail[user] = 0);
/* ์ค๋ณต ์ ๊ณ ์ ๊ฑฐ */
let set_report = [...new Set(report)];
set_report.map((item) => {
let [user, user_report] = [...item.split(" ")]
/* user๋ณ๋ก ์ ๊ณ ๋นํ ํ์ ์นด์ดํธ */
reported[user_report] ? reported[user_report].push(user) :
reported[user_report] = [user];
})
/* ์ ๊ณ ๋นํ ํ์๊ฐ k ์ด์์ด๋ฉด ์ ๊ณ ํ ์ ์ ๋ค์ ๋ฉ์ผ ๊ฐฏ์ +1 */
for(let user in reported){
if(reported[user].length >= k){
reported[user].map((who) => get_mail[who]++);
}
}
/* ์ ์ ๋ณ๋ก ๋ฐ๋ ๋ฉ์ผ ๊ฐฏ์ ์ค๋ธ์ ํธ์ value๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ */
answer = Object.values(get_mail);
return answer;
}