프로그래먼스 카카오 블라인드 채용 코딩테스트 문제 : 신고 결과 받기

  1. 문제
자세한 문제는 ( https://programmers.co.kr/learn/courses/30/lessons/92334 ) 여기로!

2. 내가 푼 해답

const transformObj = (array) => {
  const obj = {};
  const set = [...new Set(array)];
  set.forEach((log) => {
    const tmp = log.split(' ');
    if (obj[tmp[1]] === undefined) {
      obj[tmp[1]] = [tmp[0]];
    } else {
      obj[tmp[1]] = [...obj[tmp[1]], tmp[0]];
    }
  });
  return obj;
};

const solution = (id_list, report, k) => {
  const report_obj = transformObj(report);
  const answer = Array.from({ length: id_list.length }, () => 0);

  for (let i in report_obj) {
    if (report_obj[i].length >= k) {
      const ids = report_obj[i];
      ids.forEach((id) => {
        const index = id_list.indexOf(id);
        answer[index]++;
      });
    }
  }

  return answer;
};
  1. report를 { 신고당한사람 : [신고한 사람1, 신고한 사람2…]} 형태의 객체로 바꾼다. (이때 set을 활용하면 중복을 제거할 수 있다.)
  2. 위에서 반환받은 객체의 key를 반복문으로 돌면서 k번 이상 신고당한 사람일 경우, 카운트를 1 증가시킨다.
  3. 반환한다.

끝이다! 비교적 문제는 쉬웠는데, 뭔가 노가다로 푼 듯한 느낌이 사라지지 않는다.

더 좋은 풀이를 계속 찾고, 다른 사람들의 코드도 계속해서 참고해야겠다.

그리고 코딩테스트 문제를 풀면서 처음으로 함수를 분리시켜봤는데, 가독성이 훨씬 좋고 디버깅이 편해졌다.

앞으론 코딩테스트에서도 기능별로 함수를 잘 설계해야겠다!

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다