문제 1 - 신고 결과 받기
validarity : 20.8%
language : javascript
link : 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기
function solution(id_list, report, k) {
var checkData = ""; // 중복 데이터 체크
var checkList = []; // 체크할 리스트 생성
var reportArr = []; // 신고한 사람과 신고당한 사람 리스트 (분리)
var stopUser = [];
var mailList = [];
var answer = [];
checkList = report;
//중복 삭제 데이터
for(i=0; i<report.length; i++){
checkData = report[i];
let checkIndex = checkList.indexOf(checkData, i+1)
if(checkIndex != -1){
checkList.splice(checkIndex);
}
}
//계정정지된 사람
for(let i =0; i<checkList.length; i++){
let report_id = "";
report_id = report[i];
reportArr[i] = report_id.split(" ");
var v_person = reportArr[i][0]; //신고한 사람
var b_person = reportArr[i][1]; //신고당한 사람
let count = 0; //신고당한 횟수
for(let j = 0; j<reportArr.length; j++){
if(b_person === reportArr[j][1]){
count++;
}
if(count >= k){
stopUser.push(b_person);
}
}
}
//정지된 사람을 신고한 사람.
for(idx=0; idx<reportArr.length; idx++){
if(stopUser.length != 0){
for(idx2 = 0; idx2<stopUser.length; idx2++){
if(stopUser[idx2] === reportArr[idx][1]){
mailList[idx] = reportArr[idx][0];
}
}
}
}
//신고한 사람에게 메일
for(i = 0; i<id_list.length; i++){
let checkId = "";
let m_count = 0;
checkId = id_list[i];
if(mailList.length != 0){
for(j = 0; j<mailList.length; j++){
if(checkId === mailList[j]){
m_count++;
answer[i] = m_count;
}else{
answer[i] = m_count;
}
}
}else{
answer[i] = 0;
}
}
return answer;
}
이 문제는 Hash 자료구조(set, map)를 사용해서 코드를 작성할 수 있는지를 보는 문제입니다. 메서드와 자료구조에 대한 지식이 없어 for과 if만으로 구성된 복잡하고 비효율적인 코드를 짜게 되었습니다. 테스트 케이스를 통과하긴 했어도 정확성은 20퍼센트를 넘기지 못했고 가독성도 떨어지는 코드를 작성했습니다.
- Set 객체는 ES6에서 등장한 새로운 데이터 object로 Set 객체에서는 unique한 값만 저장 할 수 있기 때문에 Set을 사용하면 데이터를 중복을 쉽게 제거할 수 있습니다.
const set_list = new Set(report); //set object
const unique_report = [...set_list] // spread operator
Map은 key값으로 value를 얻을 수 있는 편리한 자료구조 중 하나입니다.
let reported_list = new Map();
let stop_list = {};
unique_report.forEach(eachData => {
let reporter = eachData.split(' ')[0];
let victim = eachData.split(' ')[1];
if(reported_list.get(victim)!=null){
let val = reported_list.get(victim) + " " + reporter;
reported_list.set(victim,val);
stop_list[victim]++;
}else{
reported_list.set(victim,reporter);
stop_list[victim]++;
}
if(stop_list[victim] >= k){
let reportedList = reported_list.get(victim).split(" ");
for(let i in reportedList){
let index = id_list.indexOf(reportedList[i]);
answer[index]++;
}
}
});
return answer;
문제가 요구하는 것이 무엇인지 파악하지 않고 코드를 작성하다보니 작성 시간은 길어졌고 비효율적이고 가독성이 떨어지는 코드를 작성하게 되었습니다. 또 메서드와 객체, 자료구조의 대한 기본적인 이해가 필요하다고 느꼈습니다.
스터디 1회차지만 많은 것을 얻어갔습니다. 제 공부방법을 반성하게 되었고 다른 사람들이 어떤 식으로 공부하는지 알 수 있었던 기회가 되었습니다.