[220302] TIL

릿·2022년 3월 2일
0

TIL

목록 보기
8/28

오후: 프로그래머스 2022 카카오 기출 '신고결과받기'

function solution(id_list, report, k) {
    let answer=Array.from({length: id_list.length}, () => 0);
    let tmp=new Set();

    for (let i=0; i<report.length; i++) {
        tmp.add(report[i]);
    }

    tmp=Array.from(tmp);
    let repoArr=[];

    for (let i=0; i<tmp.length; i++) {
        repoArr.push(tmp[i].split(' '));
    }

    for (let i=0; i<id_list.length; i++) {
        let cnt=0;
        let tmpArr=[];
        for (let j=0; j<repoArr.length; j++) {
            if (id_list[i] === repoArr[j][1]) {
                cnt++;
                tmpArr.push(repoArr[j][0]);
            }                    
        }
        if (cnt >= k) {
            for (let k=0; k<id_list.length; k++) {
                for (let l=0; l<tmpArr.length; l++) {
                    if (id_list[k] === tmpArr[l]) (answer[k])++;
                }
            }
        }
        
    }

    
    return answer;
}

let id_list = ["con", "ryan"];
let report = ["ryan con", "ryan con", "ryan con", "ryan con"];
let k = 2;
console.log(solution(id_list, report, k));

풀이과정

  1. 이전에 풀었을 때 같은 사람이 두 번 신고했을 경우에 예외처리하는 방법에 대해서 고민하다가 손을 놓았었다.
  2. 그 전에 완전탐색 코딩테스트 문제를 풀다가 set객체로 중복제거 후 배열로 돌리는 법을 배웠었던 게 기억이 났다.
  3. 2차원 배열을 만든 후에 set객체에 add하니 중복제거가 되지 않았다. 그래서 2차원 배열 만들기 전에 set객체에 add하여 중복을 제거했다.
  4. 중복제거한 배열을 2차원 배열로 만들고, answer는 id_list.length만큼의 길이를 가진 배열로 생성하고 0으로 초기화 해놓기.
  5. 2중 for문으로 신고 당한사람 횟수를 cnt에 증가시키고, 신고한 사람 아이디를 임시배열에 push해넣는다.
  6. (이 부분이 진짜 어려웠는데) cnt이 k보다 크거나 같으면 2중 for문으로 임시배열에 들어있는 아이디의 answer 인덱스를 증가시켜준다.
  7. 결과적으로 3중 for문이 되니까 시간이 너무 오래걸린다ㅠ 풀었다는 것에 의의를 두고 이건 나중에 다시 풀어보기로...

저녁: 유데미 리액트강의

용어정리

lean하게

린(Lean) 개발 방법론 : 린 시스템의 품질 기법을 소프트웨어 개발 프로세스에 적용하여 프로세스의 낭비요소를 제거 후 결과를 측정, 성과를 분석하여 소프트웨어의 품질을 향상시키는 개발 방법론

re-evaluate

컴포넌트가 real DOM으로 re-rendering이 되기 전에 re-evaluate(재평가)를 거친다.
re-evaluate(순서는 읽기 편하도록 나눠놓은 것이다. 실제로 이렇게 단계별로 진행되진 않는다.)
1) 새로운 state를 가지고 해당 컴포넌트(함수) 재실행(re-run)
2) 그 과정에서 컴포넌트 내부 구조는 모두 재생성(re-creation)(몇몇 hook 제외)
3) react가 변화 전과 변화 후 virtual DOM(가상 DOM)을 각각 생성하여 비교한 후, 차이점을 ReactDOM에게 전달
4) ReactDOM이 차이가 있는 부분만 real DOM으로 update(re-render)
(출처: https://velog.io/@kimyoungyin/React-%EA%B8%B0%EC%B4%88%EC%97%90%EC%84%9C-%EB%B2%97%EC%96%B4%EB%82%98%EA%B8%B0-State%EC%99%80-re-rendering%EC%97%90-%EB%8C%80%ED%95%B4)

named import

ex) import React, { useState } from 'react';
react파일에서 특정 기능, 'useState'를 사용하길 원하면 중괄호를 사용한다. 이를 named import라고 한다.

useState

  • 리액트 hook중에 하나로, 상태값 관리를 위해 사용한다.
  • 리액트 컴포넌트 함수 내에서만 불러올 수 있고, 컴포넌트 함수 밖, 컴포넌트 함수에 선언한 함수 내에서는 사용할 수 없다.
  • 배열을 반환하고, 첫번째 값은 현재 상태값, 두번째 값은 그걸 업데이트하는 함수명이다.
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글