본문 바로가기
728x90
반응형

분류 전체보기145

구름톤 챌린지 4주차 학습 일기 - BFS(모든 섬 방문하는 문제) 모든 섬을 방문해야하는 문제이기 때문에, BFS로 문제를 해결할 수 있다. 1. 그래프 입력 자바스크립트에서 그래프를 선언할 때는 인접 리스트 방식으로 그래프를 선언하고, 이때 사용하는 자료구조는 객체이다. 2. 연합의 개수 세기 위한 visited 변수 사용 visited는 섬의 방문 여부, 어떤 연합에 속해 있는지 확인할 수 있다. 1. visited = Array(N + 1).fill(0); 로 visited의 모든 요소를 0으로 초기화 한다. 2. visited[Node]의 값이 0이면, 그 섬은 어떤 연합에도 포함되지 않은 섬이다. 3. 연합에 속하지 않는 섬에서, 새로운 연합을 만들었을 때 이를 i번 연합이라고 한다. 4. i번 연합에 속한 섬들은 visited[Node] = i로 갱신한다. .. 2023. 9. 6.
구름톤 챌린지 3주차 학습 일기 - DP(동적 계획법) DP, 다이나믹 프로그래밍, 동적 계획법 이라고 불리는 기법은 이전에 구했던 답을 재활용하는 방식이다. 다시 말해, 이전에 구한 값을 저장해두고 다시 사용하므로써 불필요한 중복 계산을 최대한 줄이는 방법이다.(메모이제이션) 예를 들어서, 피보나치 수열을 재귀로 구현해보면 아래와 같다. 참고로 피보나치 수열은 처음 두개의 값이 0과 1이고, 이 다음 값은 맨 끝의 두 값을 더해서 만들어진다. 0, 1, 1, 2, 3, 5, 8, 13, 21, ... function fibo(N){ //첫 두값을 종단점으로 잡아줍니다. if (N === 0) return 0; if (N === 1) return 1; // N 번째 피보나치수는 N - 1번째, N - 2번째 피보나치수의 합이므로 재귀로 호출합니다. retur.. 2023. 8. 29.
자료구조 시간복잡도 정리(평균, 최악) 자료구조의 평균 시간 복잡도 자료구조 접근 탐색 삽입 삭제 배열 O(1) O(n) O(n) O(n) 스택 O(n) O(n) O(1) O(1) 큐 O(n) O(n) O(1) O(1) 이중 연결 리스트 O(n) O(n) O(1) O(1) 해시 테이블 O(1) O(1) O(1) O(1) 이진 탐색 트리 O(logn) O(logn) O(logn) O(logn) 자료구조 최악의 시간 복잡도 자료구조 접근 탐색 삽입 삭제 배열 O(1) O(n) O(n) O(n) 스택 O(n) O(n) O(1) O(1) 큐 O(n) O(n) O(1) O(1) 이중 연결 리스트 O(n) O(n) O(1) O(1) 해시 테이블 O(n) O(n) O(n) O(n) 이진 탐색 트리 O(n) O(n) O(n) O(n) 해시 테이블과 이진 탐.. 2023. 8. 28.
그리디 알고리즘 그리디 알고리즘이란? 그리디 알고리즘은 보통 탐욕법이라고 한다. 말 그대로 문제를 해결할 때 현재 경우만 고려해서 최적의 상황을 선택하는 방법이다. 그리디 알고리즘 성립 조건 2가지 하지만 당연하게도 항상 사용할 수 있는 방법은 아니기 때문에 아래의 2가지 조건이 성립된다면 그리디 알고리즘을 기계적으로 적용할 수 있다. 1. 현재의 최적의 선택이 다음 선택에 영향을 미치지 않는다. 2. 현재의 선택이 최종 선택의 최적 해결 방법에 포함된다. 그리디 알고리즘 문제를 해결하는 방법 1. 현재 상태에서의 최적의 해답을 선택한다. 2. 선택된 해가 문제의 조건을 만족하는지 검사한다. 3. 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 1번으로 돌아가 위의 과정을 반복한다. 그리디 알고리즘 예시 일반적인.. 2023. 8. 28.
구름톤 챌린지 2주차 학습 일기 v2 (2차원 배열 완전 탐색, dx/dy 기법) 2차원 배열에서 자주 사용되는 기법인 dx/dy 기법에 정리하려고 한다. dx/dy 기법은 현재 내 위치에서 상화좌우, 대각선 방향으로 이동이나 탐색을 구현할 때 사용한다. 예를 들어 arr[1][1]의 상하좌우 값은 arr[0][1], arr[2][1], arr[1][0], arr[1][2] 다. 이를 인덱스로 표현한다면 아래와 같다. dx = [0, 0, -1, 1] // 열 dy = [-1, 1, 0, 0] // 행 이를 코드로 적용해보면 아래와 같다. let dx = [0, 0, -1, 1]; let dy = [-1, 1, 0, 0]; // 시작 위치 설정 let x = 1; let y = 1; // 4방향 탐색 for (let i = 0; i < 4; i++) { let nx = x + dx[i.. 2023. 8. 23.
728x90
반응형