코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
이제 코딩테스트 문제를 풀어보려고
프로그래머스 코딩테스트 문제부터 차근차근 풀어보려고 한다
lv1문제부터 풀어보았는데 이 문제를 어찌풀어야하나
약간 멘붕왔음. 일단 제일 많이 쓰는 javascript로 풀어보았는데
내 부족함이 아~주 잘 보이더라. for문만 돌려쓰기 신공 ~ !
for문으로 떡칠된 내 풀이로 제출했더니 답은 다 맞는데 시간제한에서 걸려버렸다 ㅠㅠ
다른 사람들 해결코드 찾아보니 진짜 ..;; 신박함 ㄷㄷ
근데 내 생각이 다른 사람들의 생각과 일치하는 부분도 많아서
내심 뿌듯했다 ㅋㅋㅋㅋ 이럼 안돼 ..!!
LV 1 - 신고 결과 받기
2020 KAKAO BLIND RECRUITMENT
구글링해서 다른 분 풀이 참고한것 !!
const report_list = {
muzi: [apeach]
frodo: [muzi, apeach] - 정지
apeach: []
neo: [frodo, muzi] - 정지
}
일단 id_list 안의 각 아이디 / 그 아이디를 신고한사람의 배열 로 묶어
report_list를 만든다.
ex) 신고당한사람 : [신고한사람1, 신고한사람2 ...]
여기서 신고한사람의 배열길이가 k (정지 기준 신고 횟수) 이상이면 정지이다.
풀이코드
function solution(id_list, report, k) {
const answer = new Array(id_list.length);
answer.fill(0)
const report_list = {} //
id_list.map((user)=>{
report_list[user] = [] //key로 userid를 value로 빈 배열을 가지는 객체
})
report.map((user)=>{
const [user_id, report_id] = user.split(' ')
if(!report_list[report_id].includes(user_id)){
report_list[report_id].push(user_id)
}
})
for(const key in report_list){
if(report_list[key].length >= k){ //이용정지 유저
report_list[key].map((user)=>{
answer[id_list.indexOf(user)] += 1
})
}
}
return answer;
}
@wonyoung2 님 풀이참조 했습니다
코드 라인별 풀이
const answer = new Array(id_list.length);
answer.fill(0)
- 받아온 id_list의 길이로 배열을 만들어주고 fill 함수로 배열의 값을 0으로 채워준다.
id_list.map((user)=>{report_list[user] = []})
- map함수를 통해 key는 user_id의 값을, value는 신고한 사람을 담기위한 빈배열을 추가합니다.
report.map((user)=>{
const [user_id, report_id] = user.split(' ')
if(!report_list[report_id].includes(user_id)){
report_list[report_id].push(user_id)
}
})
- map 함수를 이용한다. 신고자, 신고당한사람을 공백을 기준으로 split 함수로 잘라준다.
중복이 되면 안되기 때문에 신고당한 사람을 key로 그 객체에 현재요소의 user가 들어있는지 확인 한다.
들어 있지 않으면 신고당한사람(key) : [신고자] 로 넣어준다.
for(const key in report_list){
if(report_list[key].length >= k){
report_list[key].map((user)=>{
answer[id_list.indexOf(user)] += 1
})
}
}
- 이제 반복문을 이용하여 요소의 길이가 k 이상이면 id_list안의 user요소의 순서를 구해서
answer 순서의 요소를 +1시켜 준다.
후기는 진짜 온통 반복문으로만 해결하려 했던 내가 너무 부끄러웠고,
answer 배열의 길이를 id_list의 길이로 만들어주고 fill함수로 처음에 0으로 값을 세팅하는 부분..
그리고 마지막 answer배열 순서에 맞춰 값을 +1해주는 부분이 너무 신박하고 놀랬다 ..!!
아직 너무 부족하다 라는게 너무 나 많이 느껴졌던 ~ 앞으로 화이팅 해야지 ~ !!
'코딩테스트' 카테고리의 다른 글
[프로그래머스] JS / 나머지가 1이 되는 수 찾기 (0) | 2022.10.31 |
---|---|
자바스크립트(JS) 약수 / 프로그래머스 - 약수의 합 (0) | 2022.09.30 |