diff --git "a/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/README.md" "b/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/README.md" new file mode 100644 index 0000000..5d296d7 --- /dev/null +++ "b/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/README.md" @@ -0,0 +1,24 @@ +# 프로그래머스 기능 개발 + +**문제 )** + +신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. + +- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. + 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. + 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. +- k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. + 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. + +**해결과정)** + +1. report에서 중복 제거해 배열 리턴 + +2. 신고당한 횟수 배열 만들기 + id_list.length만큼 0이 있는 배열 만들기 + report 공백 앞 문자열이 id_list에서 몇 번째 index에 있는지 확인하여, reportNumArr의 해당 index에 1을 더해준다. + +3. k번 이상일 때 정지된 ID 배열 만들기 + +4. id_list를 돌면서 결과메일 받을 id 확인하기 + 먼저 3.의 배열 안에 report 뒤 id가 있을 때 report 앞 id가 id_list의 몇 번째 index에 있는지 확인하고, receiveResultMailArr의 해당 index에 1을 더해준다. diff --git "a/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/solution.js" "b/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/solution.js" new file mode 100644 index 0000000..b38e9c1 --- /dev/null +++ "b/problems/\354\213\240\352\263\240\352\262\260\352\263\274\353\260\233\352\270\260/solution.js" @@ -0,0 +1,28 @@ +function solution(id_list, report, k) { + let answer = []; + const suspensionIdArr = []; //정지된 id 배열 + //report에서 중복 제거하기 + const removeRepeat = [...new Set(report)]; + // 신고당한 횟수 배열 만들기 + const reportNumArr = new Array(id_list.length).fill(0); + removeRepeat.forEach((reportElement) => { + //report 공백 앞 문자열이 id_list에서 몇 번째 index에 있는지 확인하여, reportNum의 해당 index에 1을 더해준다. + const [reportId, reportedId] = reportElement.split(" "); + reportNumArr[id_list.indexOf(reportedId)]++; + }); + // k번 이상일 때 정지된 ID 배열 만들기 + reportNumArr.forEach((reportNum, idx) => { + if (reportNum >= k) suspensionIdArr.push(id_list[idx]); + }); + // id_list를 돌면서 결과메일 받을 id 확인하기 + const receiveResultMailArr = new Array(id_list.length).fill(0); + removeRepeat.forEach((reportElement) => { + //먼저 3.의 배열 안에 report 뒤 id가 있을 때 report 앞 id가 id_list의 몇 번째 index에 있는지 확인하고, receiveResultMailArr의 해당 index에 1을 더해준다. + const [reportId, reportedId] = reportElement.split(" "); + if (!suspensionIdArr.includes(reportedId)) return; + receiveResultMailArr[id_list.indexOf(reportId)]++; + }); + // answer에 receiveResultMailArr 대입 + answer = receiveResultMailArr; + return answer; +}