본문 바로가기
728x90
반응형

etc/[구름] 구름톤 챌린지7

구름톤 챌린지 4주차 학습 일기 v2 - Set과 Array의 시간복잡도 비교 궁금한 점 알고리즘을 풀 때, 특정 값을 찾기 위해서 배열을 주로 사용하는데, 시간복잡도가 최악의 경우 배열의 길이만큼 걸릴 수 있기 때문에 비효율적이라는 생각이 들었다. 그래서 이걸 Set으로 관리하면 시간 복잡도가 줄어들지 않을까?라는 생각이 들었고, 내 생각이 맞는지 알아보기 위해 정리하게 되었다. Set Set은 중복되지 않는 값을 저장하는 자료구조이다. Set은 내부적으로 해시 테이블과 같은 자료구조를 사용해서 값을 저장한다. 값을 찾을 때 O(1)의 시간복잡도로 검색할 수 있다. Array 순서대로 값을 저장하는 자료구조이다. 중복 여부에 대한 제약은 없다. 배열의 각 요소를 순회하며 값을 찾아야 하기 때문에, 최악의 경우 배열의 길이에 비례하는 O(n)이 소요된다. 결론 정리하자면, Set은.. 2023. 9. 10.
구름톤 챌린지 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.
구름톤 챌린지 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.
구름톤 챌린지 2주차 학습 일기 문제 길이가 N인 문자열 S를 3개의 문자열로 나눈 후, 주어진 조건에 따라 점수를 계산하는 문제다. 점수는 문자열의 모든 부분 문자열의 순서에 따라서 결정된다. 나눌 수 있는 모든 경우의 수 중에서 최대 점수를 얻을 수 있는 문자열을 찾는 문제이다. 문자열의 길이의 최대 100 정도로 짧기 때문에 가능한 모든 부분 문자열을 확인하는 완전 탐색으로 문제를 해결할 수 있습니다. 나의 접근 방식 1. 3개의 부분 문자열을 만들어서 배열에 push 2. 각각의 배열을 다시 배열에 push(2차원 배열 생성) 3. Set 함수 생성하여 중복 제거 후 모든 문자열 사전순으로 나열 4. 2차원 배열을 순회하면서 사전순으로 몇 번째 인덱스인지 확인 후 해당 인덱스 모두 더하기 5. 더한 인덱스 값이 가장 큰 값이 정.. 2023. 8. 22.
728x90
반응형