ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩테스트]1. 신고 결과 받기
    [프로그래밍 | 개발]/[코딩테스트] 2022. 2. 19. 22:32

    문제 받고 처음 풀었던 것

     

    const solution = (id_list, report, k)  => {
        const answer = Array.from({length: id_list.length}, () => 0);
        /* {user: reportedCnt} */
        const userReportedCntObj = {};
        
        for (const i in id_list) {
            // 신고한 사람 리스트
            const reportUserList = [];
            userReportedCntObj[id_list[i]] = 0;
            
            for (const _ of report) {
                // 신고한 사람
                const reportUser = _.split(' ')[0];
                // 신고 당한 사람
                const reportedUser = _.split(' ')[1];
                if (id_list[i] === reportedUser
                    && reportUserList.indexOf(reportUser) < 0) {
                    reportUserList.push(reportUser);
                    userReportedCntObj[id_list[i]] += 1;
                }
    
            }
            if (userReportedCntObj[id_list[i]] >= k) {
                for (const j in id_list) {
                    if (reportUserList.indexOf(id_list[j]) > -1) {
                        answer[j] += 1;
                    }
                }
            }
            
        }
        
        
        
        return answer;
    }

    단순 코드 실행에서는 통과됐지만, 퍼포먼스에서 떨어져서 탈락

     

    셋이 들어가야 할 것 같다는 건 대충 생각이 들었는데, 

    다른 분이 짠 코드 보고 스프레드 연산자로 '배열 > 셋' 으로 만드는 것을 처음 알았다.

     

    다른 분 것으로 테스트 하려고 눌렀다가 제출 되어버려서... 낭패..

    실수로 제출하면 박제된다. 조심하자.

     

    내 생각의 코드가 아니므로,

    그 분의 코드를 읽어가며 조금씩 바꿔 보았다

     

    const listToObj = (_) => {
      const obj = {};
      const set = [...new Set(_)];
      set.forEach( __ => {
        const tmp = __.split(' ');
        ! obj[tmp[1]]
        ? obj[tmp[1]] = [tmp[0]]
        : obj[tmp[1]] = [...obj[tmp[1]], tmp[0]];
      });
      return obj;
    };
    
    const solution = (id_list, report, k) => {
      const reportObj = listToObj(report);
      const answer = Array.from({ length: id_list.length }, () => 0);
    
      for (const i in reportObj) {
        if (reportObj[i].length >= k) {
          const reportUserList = reportObj[i];
          reportUserList.forEach((user) => {
            answer[id_list.indexOf(user)]++;
          });
        }
      }
    
      return answer;
    };

     

    배운 점

    1. 스프레드 연산자로 간단하게 배열 > 셋 형식으로 형변환

    2. Array 객체 기본 메서드로 원하는 길이의 원하는 값들 간단한 초기화

    댓글

Designed by Tistory.