목록전체 글 (391)
나의 발자취

원래 JS에서는 변수를 선언할 때 var만 사용할 수 있었다. 그런데 2015년부터 let과 const가 추가되었다.그러면서 원래 사용되던 var를 이제는..변수를 사용할 때 사용하게 되면 다소 superfluous한 느낌이 되어서 이제 거의 JS를 사용할 땐 변수에는 let, 상수에서는 const를 사용하는 편이 되었다. var는 스코프 밖에서도 되지만, let과 const의 경우는 그들이 선언된 스코프 내에서만 존재한다. 스코프란 함수도 될 수 있고, 루프도 될 수 있고, if 조건문도 될 수 있다. {}를 이용해서 열고 닫는 모든 것들이 scope가 될 수 있다.그렇기 때문에 아래와 같이 루프 안에서만 j가 존재하기 때문에, 출력을 하려고 하면 오류가 나는 것이다. 만약에 내가 변수를 오버라이딩..

CRA는 Create React App의 준말으로, 리엑트 코어팀 소속이자 리덕스를 만든 Dan Abranmov가 만든 리액트 스타터 팩이다. yarn create react app projectname npm install -g create-react-app create-react-app projectname으로 하면 projectname으로 된 폴더가 만들어지면서 그 안에 리액트 프로젝트가 생성된다. 예를 들어, yarn으로 프로젝트를 설치하면 이렇게.. 아래와 같이 뜨는데 yarn startdev 서버를 시작하는 것이다. npm이면 npm start를 하면 됨. yarn build public server에 배포를 할 수 있게끔 앱의 빌드 폴더를 만드는 것이다. 개발용 빌드(yarn start..

Node.js and npmnvm을 이용해서 설치를 권장한다. YarnNode, npm도 훌륭한 패키지 매니저긴 하지만, 페이스북에서 만든 yarn은 리액트를 좀더 쉽게 이용할 수 있도록 더 간결한 커맨드와 더 나은 캐싱을 제공하여 더 좋은 성능을 보인다. npm install --global yarnnpm i -g yarn을 사용해서 설치하면 된다. Babel리엑트 기반의 프로젝트를 만들 때 의존성(dependency)용으로만 사용된다(npm package임). 바벨은 이슈 없이 모던 브라우저의 기준에 맞지 않거나 표준화되지 않은 자바스크립트가 실행될 수 있도록 transpile 과정을 도와주는 역할이다. (transpiling: 소스 코드의 언어를, 기능적으로 완전히 똑같게 다른 언어로 바꾸는..

문제 링크 https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/ 문제 접근 방법 투포인터의 응용 문제이다.tail으로부터 출발하면 투포인터 쓰지 않아도 되지 않나...생각했는데, 투포인터를 쓴대니까 right pointer로 삭제할 노드를 짚어내나? 라고 생각해서 접근했는데 이렇게는 도무지 투포인터 패턴으로 문제가 안풀리는거다. 일단 left pointer의 역할은 연결리스트 특성상 노드를 삭제하고 나면 삭제된 노드 이전 노드랑 연결하는 역할일거라 생각해서, left pointer는 루프가 끝났을 때 무조건 그 곳으로 가있어야할 것 같았고.. (즉, Nth Node - 1에 위치하고 있어야함) 그럼 left/right po..

문제 링크 https://leetcode.com/problems/3sum/description/ 문제 접근 방법투포인터임. 무조건~ 근데 중복 값 처리가 은근 까다롭다. 1. 일단 처음은 배열을 정렬해서, 중복되는 값들을 처리하기 쉽게 하는데 이렇게 되면, 중복된 값들이 정렬된 배열에 서로 연속으로 놓여있기 때문에 스킵하기 편하고, 이 결과 유니크한 triplet을 답으로 확보할 수 있다. 2. 그다음은 순회를 할건데, 각 순회마다 "피벗"이 되는 nums[i]를 두고 그 오른쪽의 값들(추후 투포인터가 됨)이랑 비교를 계속 하는거다. 목표는 투포인터의 합이 -nums[i]가 되면 된다. 그래서 만약에 합이 너무 크면 right 포인터를 왼쪽으로, 작으면 left 포인터를 오른쪽으로 옮기면서 하면 되..

문제가 요구하는 것에 따라서 조금씩 다르다. LC에서는 파이썬의 리스트 인덱싱 기법을 이용해서 풀었고, class Solution: def isPalindrome(self, s: str) -> bool: phrase = [] for i in s: if i.isalnum(): phrase.append(i.lower()) return phrase == phrase[::-1] 다른데에서는 투포인터 이용해서 풀었다.def is_palindrome(s): left = 0 right = len(s)-1 while left
Two Pointers?리트코드 알고리즘 문제에서 정~말 많이 사용되는 유형으로, 보통 데이터 구조가 선형 구조이고, 데이터의 연산이 두 개의 포인터를 가지고 연속적으로 해야할 때 사용된다. 대표적인 유형으로는 Two Sum이 있다. ㅎ투 포인터 기법을 쓰는 이유는 뭣보다도 시공간 복잡도가 O(N)에 처리될 수 있는 장점때문이다.이 말고도 문자열이 palindrome인지 구분할때에도 쓸 수 있고, 더 많은 전형적인 유형들은 아래에서 다루어볼 것이다. In Real-World Problems대학교에서는 알고리즘에 관하여 이렇게는 안알려주는 것 같은데, 이것이 왜 필요한 기법인지 납득이 가야지만 알고리즘을 잘 활용하는 나같은 유형의 경우 이걸 좀더 일찍 알았더라면~ 하는 아쉬움은 있다.따라서 무작정 '알고..

문제 링크https://leetcode.com/problems/increasing-triplet-subsequence/description/?envType=study-plan-v2&envId=leetcode-75 문제 접근 방법greedy 고민한 부분처음에는 루프 순회를 역으로 하려다가.. 아닌것같아서 바로 접었다. 코드class Solution: def increasingTriplet(self, nums: List[int]) -> bool: first = second = float('inf') # first와 second 초기화 for num in nums: if num