본문 바로가기
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.
구름톤 챌린지 2주차 학습 일기 문제 길이가 N인 문자열 S를 3개의 문자열로 나눈 후, 주어진 조건에 따라 점수를 계산하는 문제다. 점수는 문자열의 모든 부분 문자열의 순서에 따라서 결정된다. 나눌 수 있는 모든 경우의 수 중에서 최대 점수를 얻을 수 있는 문자열을 찾는 문제이다. 문자열의 길이의 최대 100 정도로 짧기 때문에 가능한 모든 부분 문자열을 확인하는 완전 탐색으로 문제를 해결할 수 있습니다. 나의 접근 방식 1. 3개의 부분 문자열을 만들어서 배열에 push 2. 각각의 배열을 다시 배열에 push(2차원 배열 생성) 3. Set 함수 생성하여 중복 제거 후 모든 문자열 사전순으로 나열 4. 2차원 배열을 순회하면서 사전순으로 몇 번째 인덱스인지 확인 후 해당 인덱스 모두 더하기 5. 더한 인덱스 값이 가장 큰 값이 정.. 2023. 8. 22.
구름톤 챌린지 1주차 학습 일기 v2 5일차 문제에서 알아두면 좋은 코드가 있어서 정리했다. 배열안에 여러 개의 배열들이 있고, 각 배열의 두 번째 값을 기준으로 내림차순 정렬하는데, 만약 두 번째 값이 같은 값인 경우에 각 배열의 첫 번째 값을 기준으로 내림차순 정렬을 하고 싶었다. 이를 해결하기 위한 아주 간단한 방법이 있다. 예를 들어 arr이 아래와 같을 때, sort를 사용하여 정렬시키면 원하는 결과값을 가져올 수 있다. let arr = [ [ 1, 1 ], [ 2, 1 ], [ 3, 2 ], [ 4, 1 ], [ 5, 2 ], [ 6, 2 ], [ 7, 3 ], [ 8, 1 ] ] arr.sort((a, b) => b[1] - a[1] || b[0] - a[0]); console.log(arr) /* [ [ 7, 3 ], [ 6.. 2023. 8. 20.
구름톤 챌린지 1주차 학습 일기 구름톤 챌린지는 구름에서 진행하는 챌린지이다! 매일 오전 10시에 알고리즘 문제가 주어지고 주어진 시간 내에 문제를 수행하면 된다. 48시간 내에 주어진 문제를 해결하면 블록을 얻을 수 있는데, 모두 모으면 오프라인 챌린지까지 참여할 수 있는 기회가 생겨서 참여하게 되었다. 물론 랜덤으로 뽑히는 거 같긴하지만 그래도 뽑히면 완전 좋으니깐! 구름톤 챌린지 구름LEVEL 알고리즘 먼데이 챌린지가 구름톤 챌린지로 새롭게 찾아왔습니다. 온라인 알고리즘 문제 풀이와 오프라인 팀 챌린지를 모두 즐길 수 있는 구름톤 챌린지와 4주 동안 매일 꾸준히 성장 9oormthonchallenge.oopy.io 알고리즘에 취약하기도 하고, 아직 취준생이라 피할 수 없는 코딩 테스트를 준비하기 위한 나를 위한 챌린지가 아닐까라고.. 2023. 8. 16.
이미지와 데이터 서버로 같이 전송하는 법 - FormData 생성 및 사용법 원래 코드상에서 이미지 정보 1번, 작성된 데이터 1번 이렇게 총 2번 서버로 전송하는 방식이었다. 한 페이지에서 사용되는 정보들을 굳이 2번 나누어서 전송해야 하는 불필요함을 해결하기 위해 찾아보다가 FormData를 생성해서 사용하면 되는 것을 확인하고, 코드에 적용해 봤다. FormData란? 먼저 FormData는 form 데이터를 동적으로 생성하고, 조작할 수 있게 해줍니다. 사용되는 메서드들 FormData.append() FormData 객체 안에 이미 키가 존재하면 그 키에 새로운 값을 추가하고, 키가 없으면 추가합니다. 첫 번째 인자로 key를 두 번째 인자로 값을 설정할 수 있습니다. FormData.delete() FormData 객체로부터 키/밸류 쌍을 삭제합니다. FormData... 2023. 8. 12.
[프로그래머스/더 맵게] - JS로 힙 직접 구현해보기 문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 시간 복잡도 힙을 사용하지 않고, 코드를 구현했었는데, 효율성까지 통과해야하는 문제였기 때문에 힙을 사용해서 구현을 해야만 효율성을 모두 통과할 수 있었다. 처음에는 힙을 사용하지 않고 배열을 매번 정렬했었기에 nlogn의 시간복잡도가 걸렸지만, 힙을 사용함으로써 logn으로 시간복잡도를 줄일 수 있었다. 알고리즘 설계 처음 작성한 코드는 아래와 같다. function solution(scoville, K) { let answer = 0; // 섞어야 하는 최소 횟수 // 모든 값이 K 이상인지 확.. 2023. 8. 8.
728x90
반응형