전체 글

전체 글

    [React] 리액트 초기 환경 세팅하기

    node 프로젝트를 생성(npm init)하고 기본적인 라이브러리들을 설치한다. npm i react @types/react npm i react-dom @types/react-dom npm i typescript npm i -D prettier eslint-plugin-prettier eslint-config-prettier ESLint와 prettier도 설치해주면 좋다. 사실 VSCode를 쓴다면 extensions만 설치해도 에디터가 다 잡아주기 때문에 node 모듈까지 굳이 설치할 필요는 없는 것 같다. 착각하기 쉬운데, 저장을 눌렀을 때 코드가 자동으로 정렬되고, 잘못된 코드에 밑줄이 그어지는 건 npm으로 설치하는 eslint와 prettier가 하는 게 아니다. 그건 vscode가 지원하는..

    [프로그래머스] H-index

    [프로그래머스] H-index

    문제: https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 문제를 조건을 그대로 따라가면서 풀었다. isValid 함수는 넘어온 h값이 h-index의 후보가 될 수 있는지를 true false로 리턴한다. solution 함수에서는 0부터 999까지를 h에 넣어보며 h의 최댓값을 구한다 (문제 조건에 따라 h는 0이상 1000이하이다.) 지금보니 range를 1000이 아니라 l..

    [프로그래머스] 가장 큰 수

    [프로그래머스] 가장 큰 수

    문제: https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 맨 처음 직관적으로 드는 생각: 주어진 숫자로 가장 큰 수를 만드려면, 주어진 숫자들을 내림차순으로 정렬하면 되지 않을까? ex) 1, 3, 9 가 주어졌을 때 가장 큰 수는 931 하지만 숫자들이 일의 자리를 넘어가게 되면 문제가 생긴다. ex) 1, 3, 10 이 주어졌을 때 가장 큰 수..

    [프로그래머스] 이중 우선순위 큐

    [프로그래머스] 이중 우선순위 큐

    문제: https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr max heap queue와 min heap queue를 만들고 operation에 맞게 업데이트해주면 된다. max heap queue에서 pop하는 경우, 데이터 동기화를 위해 min heap queue도 같이 pop해줘야 하는데, 그냥 remove로 삭제했다. 이렇게 해보고 혹시 성능상의 이슈가 있으면 탐색하는 부분을 따로 구현하려고 했는데 큰 문제는 없어보인다. + 생각해보니 max heap에서 최솟값은 리프노드에 있으므로 remove 연산 후 heapify를 해주지 않아도 된다.

    Stackoverflow는 사랑입니다.

    https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument "Least Astonishment" and the Mutable Default Argument Anyone tinkering with Python long enough has been bitten (or torn to pieces) by the following issue: def foo(a=[]): a.append(5) return a Python novices would expect this function to always stackoverflow.com https://stackoverflow.com/questions/36842..

    [프로그래머스] 기능개발

    [프로그래머스] 기능개발

    문제: https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 1. 작업해야하는 day 계산 2. 모든 작업에 day * speed 더함 3. 완료된 작업의 개수 n 계산 4. n개 pop 5. answer에 n 추가 반복조건: progresses가 비어있지 않음

    [프로그래머스] 더 맵게

    [프로그래머스] 더 맵게

    문제: https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 힙으로 만들고 2개씩 pop 해서 mix 한 뒤 push 하는 걸 반복한다. 반복조건: 힙의 루트노드가 K 미만인 경우 예외: 더이상 섞을 수 없는 경우 => return -1

    [Pylance] Import  could not be resolved from source (reportMissingModuleSource)

    [Pylance] Import could not be resolved from source (reportMissingModuleSource)

    가상환경을 사용하는 경우 pylance가 가상환경에 설치된 모듈을 잡지 못해 발생하는 에러다. 실행은 잘 되기 때문에 무시해도 되지만, 자동완성이 안된다거나 노란색 밑줄이 거슬리는 문제가 있다. 해결법은 직접 모듈의 경로를 추가해주면 된다. 워크스페이스의 .vscode 폴더에 settings.json 파일을 위와 같이 작성해주면 에러가 사라진다. 가끔 settings.json 파일을 인식하지 못할 떄가 있는데, 그럴 때는 settings.json 파일을 .vscode 폴더 밖으로 옮겼다가 다시 원상복구 해주면 인식이 된다.

    파이썬 closure

    파이썬 closure

    inner 함수 안에서의 count 변수는 상위 스코프의 count 변수를 참조한다. 하지만 이렇게 count += 1 을 추가해주면 오류가 발생한다. 왜 이 경우에는 상위 스코프의 count 변수를 참조할 수 없는 걸까? count += 1이 count = count + 1 과 같은 코드라는 걸 생각해보면 납득할만한 결과이다. count를 대입연산자를 이용해 정의하면 로컬 변수가 만들어지는데, 그 로컬 변수를 만들 때 count 값을 사용하기 때문..

    [React] 왜 key는 list에서만 필요할까? 왜 index를 key로 사용하면 안되는 걸까?

    1 1 1 {[1, 1, 1].map(v => {v})} 위의 두 코드는 서로 같은 결과는 내는데, 아래의 코드는 react에서 경고를 뿜어낸다. 각 element가 고유한 key값을 가져야 한다는 것. 이 key를 넘겨줘야 하는 이유는 list의 각 요소에 대해 react에서 key를 임의로 부여하기 어렵기 때문이다. {[1, 1].map(v => {v})} 이 코드를 보자. 요소가 3개에서 2개로 줄었는데, 첫 번째가 사라진건지, 중간에 있던 게 사라진건지, 아니면 마지막 요소가 사라진건지 리액트 입장에서는 알 수 없다. 따라서 개발자가 정해줘야 하는 것이다. {[1, 1, 1].map((v, index) => {v})} 그렇다고 이렇게 index로 정해주면 안된다. 첫 번째 요소가 삭제되어도, 두 ..

    [Typescript] 객체의 키로 일반적인 값이 들어갈 때

    객체의 키로 일반적인 값이 여러 개 들어갈 때 ex) {0: 'hi', 1: 'hello', '2': 'greeting'} interface IQuestions { [id: number]: string; } 이렇게 타이핑해주면 된다.

    [ES6] Computed Property Name

    ES6부터 computed property name을 지원한다. let key = "name"; let obj = { [key] : "blabla" } key를 [ ] 로 감싸면 key 대신 name이 property name으로 들어간다.

    [React] React.FC, React.VFC를 쓰면 안되는 이유

    리액트와 타입스크립트를 사용할 때 FC와 VFC가 타입으로 쓰인다. VFC가 나오기 이전에 FC를 사용하는 걸 피해야 했던 이유는 크게 두가지가 있었다. FC가 props로 children을 옵셔널로 포함하고 있기 때문에 children이 필요하지 않은 컴포넌트에 children을 전달하는 경우 어떠한 오류도 발생하지 않는다. (엄격함을 지향하는 typescript와 모순되는 것처럼 보인다.) FC와 defaultProps를 동시에 사용하는 경우 제대로 작동하지 않음 근데 children을 없앤 VFC가 나오고, defaultProps가 deprecated 되면서(이전 글 참고) 위의 두 문제는 해결되는 것처럼 보였다. 왜 처럼이냐면 VFC 역시 사라지게 될(deprecated) 운명이기 때문.. 정확히..

    [React] 함수형 컴포넌트에서 defaultProps와 default parameters 중 무엇을 사용해야 할까?

    아래와 같이 defaultProps를 사용해서 props가 명시되지 않은 경우 기본값을 사용하게 할 수 있다 const Component = ({ prop1, prop2 }) => ( ); Component.defaultProps = { prop1: 'hello', prop2: 'world', }; ES6 문법에서, 아래와 같이 비구조화 할당을 이용해 default parameter를 지정해줄 수 있다. const Component = ({ prop1='hello', prop2='world' }) => ( ); 위 두 방법 모두 동일한 기능을 수행하는데, 두 번째 방법(default parameter)을 사용하는 걸 추천한다. defaultProps는 본래 클래스형 컴포넌트에서 사용되기 위해 만들어졌다...

    Proportional Share (fair share)

    Proportional Share (fair share)

    Proportional Share (fair share) turnaround time, response time을 고려하지 않고 특정 퍼센트만큼의 CPU 실행시간을 보장해줌 Lottery scheduling 티켓이 많은 job이 실행될 확률이 더 높다. A: 0~74 B: 75~99 랜덤으로 0~99 중에 하나 뽑아서 그 숫자를 갖는 job을 실행 ticket currency A, B가 각각 100 티켓을 가지고 있다. A의 job은 2개, 각 job에 500의 티켓을 줌 B의 job은 1개, 그 job에 10의 티켓을 줌 500 -> 50 10 -> 100 ticket transfer client 가 server에게 ticket을 줘서 server 작업이 빨리 끝나게 하는 경우 ticket inflat..