2022-05-01(일) TIL

황인호·2022년 6월 7일
0

TIL 모음

목록 보기
36/119

알고리즘 문제풀이(프로그래머스)

문제명 : 신고결과받기

링크 https://programmers.co.kr/learn/courses/30/lessons/92334

입력값

  • id_list : 이용자의 id가 담김 문자열 배열
  • report : 각 이용자가 신고한 이용자의 ID가 담긴 문자열 배열
  • k : 정지 기준 신고 횟수(포함)

출력값

  • 각 유저별 처리 결과 메일을 받은 횟수를 담은 배열
id_list = ["muzi","frodo","apeach","neo"]
report = ["muzi frode","apeach frodo","frodo neo","apeach muzi"]
k = 2

이면

[2,1,1,0]
왜 [2,1,10]이지?? 아래 내용을 참고

muzi가 신고한 frodo,neo는 신고를 2번 당했다. 2명이 2번이상 신고당해서 2
frodo가 신고한 neo 는 신고를 2번 당했다. 1명이 2번이상 신고당해서 1
apeach가 신고한 frode는 신고를 2번 당했다. 1명이 2번이상 신고당해서 1
neo는 슈퍼 민폐유저였는지 신고는 안하고 신고만 졸라당했다... 0

핵심포인트

  • answer는 각 element가 number인 배열로 나와야 한다.
  • 신고 정보에 대한 정보가 필요하다.
    신고 정보는 여러 사람의 정보가 들어가며, ‘사람’과 ‘신고한 사람’의 쌍으로 들어간다. 따라서 객체를 사용해야 한다.
  • 중복신고에 대하여 중복을 없애는 과정이 필요하다.

해결과정

  • 위의 answer 변수의 값을 [0,0,...,0]의 형식으로 바꿔주어야 한다.
const answer = new Array(id_list.length).fill(0)

신고 정보에 대한 정보를 배열로 저장하고, 사람과 신고한 사람의 쌍으로 맞춰주자.
이때는 computed property를 사용하자

//해당 코드는 신고한사람 + 신고할 사람의 형식이다.
//서로 떨어뜨리기 위해서 split(' ')를 사용했다.
report.map(el => {
	const [user_id,report_id] = el.split(' ')
})

report.map(el => {
	const [user_id, report_id] = el.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 >= 2){
		report_list[key].map(user => {
			answer[id_list.indexOx(user)] += 1
		})
	}	
}
이렇게 작성해주고 return해주면된다.

최종코드

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
}
profile
성장중인 백엔드 개발자!!

0개의 댓글