분류 전체보기

알고리즘/코딩테스트

모듈러 연산의 분배법칙

(a * b) % c = (a % c * b % c) % c (a + b) % c = (a % c + b % c) % c (a - b) % c = (a % c - b % c + c) % c 코테에서 흔히 나오는 나머지 연산 -> 마지막에만 때리면 거의 무조건 오버플로우 난다..! 제발 그만 까먹자.

TIL/JavaScript

[240105] 호이스팅, 변수 생성 과정, TDZ

호이스팅이란? 스코프 안에 선언한 것들을 실행 전 스코프의 최상단으로 끌어올리는 것 .. 이 아니라! 끌어올려진 것 같은 현상 호이스팅의 대상 자바스크립트의 모든 선언에만 호이스팅이 일어난다. 즉, 할당에는 호이스팅이 일어나지 않는다. 변수 생성 과정 [1] 선언 단계(Declaration phase) 변수를 실행 컨텍스트의 변수 객체에 등록한다. 이 변수 객체는 스코프가 참조하는 대상이 된다. [2] 초기화 단계(Initialization phase) 변수 객체에 등록된 변수를 위한 공간을 메모리에 확보한다. 변수는 undefined로 초기화된다. [3] 할당 단계(Assignment phase) undefined로 초기화된 변수에 실제 값을 할당한다. 변수 생성 과정은 어떻게 진행되는가? 함수 선언문..

TIL/TypeScript

[240104] 이펙티브 타입스크립트 1주차

Effective Typescript 1장, 2장을 읽고 선정한 인터뷰 질문과 스터디 내용입니다. 내용요약 깃허브 저장소 1장 요약 링크 2장 요약 링크 인터뷰질문 Q. 프로젝트에 타입스크립트를 도입한 이유? A. 타입스크립트를 도입한 이유는 개발 생산성 향상입니다. 협업 시 문맥 파악이 용이하고 자동완성을 통해 효율성을 높일 수 있었습니다. 또한 컴파일 타임에 타입을 체크하는 정적 타이핑을 지원하기 때문에 에러를 사전에 방지할 수 있었습니다. Q. type을 선언하게 되면 코드가 늘어나는데, 이 부분에 대한 성능 처리? A. 타입스크립트는 자바스크립트 런타임 성능에 영향을 주지 않습니다. JS로 컴파일되는 과정에서 타입이 제거되기 때문입니다. Q. any타입을 지양해야 하는 이유 A. 프로젝트 중 느..

알고리즘/코딩테스트

[JS] 배열을 순회하는 반복문, 함수 (for, for ... of, map(), filter(), forEach(), reduce()) 비교

JS 코딩테스트에서 상황별로 유리한 반복문과 함수에 대한 내용을 다룹니다. 시간복잡도 O(n)으로 동일하다. for for (let i = 0; i < 배열.length; i++) { /* ... */ } 반복 시작점, 끝점, 증분 커스텀 가능 return제어 O for ... of for (const item of 배열) { /* ... */ } 배열에서 값만 취할 때 사용 return제어 O forEach와 다르게 iterable 객체면 다 순회가능 cf. for...in 은 객체를 순회 or 인덱스값이 필요할 때 용이 (배열도 객체이긴 하지만, key인 index값만 가져올 수 있기 때문에 배열에서는 for...of가 유리하다) map const arr = ['1', '2', '3']; const ..

TIL/Git

[CI/CD] Github Action을 이용한 자동화와 브랜치 전략

0. 왜 자동화를 시작하게 되었나 이전 프로젝트에서는 PR 하나마다 스크린샷과 영상을 첨부했으나, GUI와 기능만을, 그것도 수동으로 확인할 수 있었다. 각자의 개발환경이 다르다 보니 빌드 에러를 제대로 확인하지 않고 PR이 병합되는 상황이 발생했다,, ➡️ CI와 CI 자동화의 필요성 사실 vercel에서는 commit과 PR을 기준으로 한 CD 자동화를 코드 없이도 제공한다. 하지만 문제는 난 거지이고... 팀 플랜을 이용하기엔 돈이 아깝다는 것이다. (즉 organization으로 판 레포를 직접 배포할 수 없었다.) 그래서 다들 많이 사용하는 방법인, 팀 레포를 개인 레포로 fork해온 다음 개인레포를 배포하는 방법을 선택했는데, 이게 차아아암 귀찮다. 왜냐하면 포크한 내 레포는 당연하게도 항상 ..

개발일기

웹개발 1년을 돌아보며 🎂

해왔던(할) 활동들 전국 연합 IT 동아리 피로그래밍 17기 (2022.6.28 ~ 2022.8.23) 신촌 연합 IT 동아리 CEOS 16기 • FE (2022.9.7 ~ 2023.2.10) 외주연계형 IT 동아리 CMC 13기 • Web (2023.5.27 ~) 여기어때 QA팀 인턴 (2023.7.3 ~) 오픈소스 컨트리뷰션 아카데미 Backend.AI 멘티 • FE (2023.7.8 ~) 배포한(할) 프로젝트들 그룹핑 (2022.8.2 ~ 2022.8.23) Welcome to the DMZ (2022.11.4 ~ 2022.12.18) 1인가구를 위한 숏폼 레시피 서비스 Recipeasy • FE (2022.10.07 ~ 2023.1.28) 동아리를 위한 그룹웨어 Waldreg • FE (2023...

알고리즘/알고리즘 개념

BFS

1️⃣ 매개변수로는 그래프와 시작점 받기 def bfs(graph, start):​ 2️⃣ deque() 활용하여 queue 생성 queue = deque() 3️⃣ 시작점 방문하고 큐에 시작 인덱스 추가 visited[start] = True queue.append(start) 4️⃣ queue가 빌때까지 반복 큐에서 가장 먼저 들어갔던 인덱스 꺼내서, 해당 인덱스와 연결된 노드 순회 while queue: cur = queue.popleft() for node in graph[cur]: 5️⃣ 만약 노드를 방문하지 않았다면, 방문하고 큐에 해당 노드 인덱스 추가 if not visited[node]: visited[node] = True queue.append(node)

알고리즘/알고리즘 개념

이분탐색

1️⃣ left right 설정하기 2️⃣ while True 반복, mid 설정 while True: mid = (left+right)//2 3️⃣ mid 값을 이용하여 주어진 조건에 만족하는지 체크하기 위한 값 구하기 count = 0 for line in lines: count += line//mid 4️⃣ left > right 면 반복 끝내고 값 출력 if left > right: print(mid) break 5️⃣ 주어진 조건 만족에 따라 left와 right 값을 조절한다 if count < n: right = mid - 1 else: left = mid + 1 예시 문제 BOJ 1654

햄oOoOo
'분류 전체보기' 카테고리의 글 목록 (9 Page)