codestates

    [알고리즘] DFS, BFS 기본 구현

    설명 DFS, BFS 처음 볼때에는 정말로 햇갈렸습니다. 하지만 DFS와 BFS의 원리를 알고 DFS의 D의 영어가 Depth(깊이) BFS의 B의 영어가 Breadth(폭, 너비) 라는 것을 알고 있으면 쉽게 햇갈리지 않을거라고 생각합니다. 순열, 중복순열, 멱집합에 대해 앞 게시글에 작성을 하였는데 전부 DFS로 작성을 하였습니다. 물론 BFS로 풀면 풀 수 있지만 효율의 문제여서 상황에따라 BFS, DFS를 잘 쓰는게 중요합니다. 그래서 제가 생각하는 BFS를 쓰는 경우에는 찾고자 하는 그래프의 깊이가 얕거나, 최단 경로를 찾아야할 때에 가장 유용한 방법 이라고 생각합니다. BFS는 층에 개념으로 보는게 더 효율적입니다. 모든 층을 다 둘러 보았을때에 그 다음 층을 보러 가는 것입니다. 1. 사장 ..

    [알고리즘] 멱집합에 대해서 (DFS)

    설명 앞선 게시물에서는 순열, 중복순열에서 다루었는데 멱집합과 유사하지만 멱집합은 다른 조건이 붙습니다. 순열, 중복순열의 출력값의 길이가 전부 동일하지만 멱집합은 그렇지 않다는 점이며, 선택의 유무가 자유롭습니다. 멱집합 S={a, b}라 하면, P(S)={ ∅, {a}, {b}, S } 이다. 원소의 개수가 n개인 집합의 부분집합의 개수는 2^n(2의 n승)개이므로, 멱집합의 원소의 개수 또한 2^n(2의 n승)개가 된다. 멱집합은 위상 공간 등의 개념에 사용된다. (n승 맥북으로 어떻게 쓰나요..ㅠ 알려주실분..) 어찌되었든 순열, 중복순열은 n의 r 승의 경우의 수가 나오는 반면에, 멱집합은 2의 n승의 경우의 수가 나온다. 여기서만 보아도 멱집합의 특징을 볼 수있다. 좀 더 작은 경우의 수가 나..

    [알고리즘] 중복순열, 순열에 대해서 (DFS)

    순열 : 서로 다른 n 개 중 r 개를 골라 순서를 고려해 나열한 경우의 수. 순열의 개념은 굉장히 쉽습니다. n개에서 -1씩 빼서 r이 될 때까지 그 숫자를 나열해 곱해주면 그 경우의 수가 나온다. 결국 펙토리얼과 같은개념 입니다. nPn=n(n-1)(n-2)···2·1=n! 중복순열로 이어진다면 n의 r 제곱으로 이어 져서 nPr 로 표현이 가능할 것입니다. 수학적인 개념도 중요하지만 개념을 하는것과 코딩으로 풀어내는것은 좀 더 높은 수준을 요구 하는 것으로 저에겐 보여집니다. 배우는 것 보다 남에게 누구에게 가르친다는것은 더 많은 것을 알아야 하는 것 처럼 코딩 한다는 것은 어떠한 상황을 컴퓨터에게 가르쳐줘야 하는 것과 같기 때문에 코딩을 하는 것은 더 어려운 것 같습니다. 중복순열이 중복이 가능하..

    [알고리즘] 소수 판별식 (에라토스테네스의 체)

    1. num 사이의 숫자를 모두 나눠서 확인하는 방법 function isPrime(num) { for(let i = 2; num > i; i++) { if(num % i === 0) { return false; } } return num > 1; } 2. num 제곱근 까지만 확인 하는 방법 function isPrime(num) { let sqrt = parseInt(Math.sqrt(num)); // num에 제곱근 후 소수점 버림 if (num === 1) { return false; } if (num === 2) { return true; } if (num % 2 === 0) { return false; } // 1, 2에 대한 경우의 수와 2의 배수는 미리 걸러냄 for (let i = 3; ..

    [알고리즘] Algorithm with Math / 정규표현식

    컴퓨터가 단순하게 연산하기 때문에, 기본적인 컴퓨터 과학과 수학은 통하는 부분이 있습니다. 그러므로 수학을 학습하는 것은 프로그래밍의 기본을 탄탄히 하는 일입니다. 그러므로 수학은 프로그래밍에 많은 도움이 됩니다. 알고리즘 파트에서 다루는 수학은 중학교 수준의 수학입니다. 알고리즘 테스트(코딩 테스트)를 해결하는데 필요한 최소한의 수학을 다룹니다. 프로그래밍을 위한 최소한의 수학이기 때문에 학습해야만 하는 내용입니다. 알고리즘 문제에서 자주 다루는 최소한의 수학만 익혀, 적재적소에 활용할 수 있는 능력을 기르는 것이 가장 큰 목표입니다. 최근 코딩 테스트에 등장하는 알고리즘 문제는 단순히 "너 이 알고리즘 알아?"라고 물어보지 않습니다. 요즘 출제되는 문제는 "특정 방법을 사용해서 풀어 볼래?"라고 물어..

    [알고리즘] Time Complexity / greedy Algorithm / implementation

    알고리즘은 문제를 해결하는 최선의 선택입니다. 1. 문제를 이해하고 2. 전략을 세우고 (수도코드, 흐름의 그림, 페어에게 설명) 3. 이에 따라 코드 작성으로 문제 해결 개발자로서 만나게 될 대부분의 개발 태스크는 알고리즘 문제만큼 어렵지 않습니다. 그러나 새로운 문제에 봉착했을 때, 전략과 알고리즘을 구상하여 실제로 코드로 구현해 보는 경험은 매우 중요합니다. 많은 기업에서 주니어 개발자를 채용할 때에, 알고리즘 풀이를 통해 지원자의 역량을 가늠합니다. 알고리즘 풀이를 통해 지원자의 로직과 문제해결 방식을 확인하고, 이를 통해 개발자다운 사고방식을 보게 된다고 합니다. 1. Time Complexity 알고리즘 문제를 풀때 해결하는것도 가장 중요하지만 효율적인 알고리즘을 찾는 것 또한 중요합니다. 효..

    [Linux] 심화

    1. Read, Write, Execute 사용 권한 1) 권한에 대한 개념 r은 read권한으로 읽기, w는 write권한으로 쓰기, x는 execute권한으로 실행을 의미합니다. r, w, x 각 문자가 적혀있으면 해당 권한이 있는 것이고, - 라고 표시되어있으면 해당 권한이 없습니다. 폴더 생성 명령어 mkdir 파일 생성 명령어 nano (파일이름.확장명) 생성후, 파일안 내용 입력하고 ctrl + x, y, enter 누르면 파일 생성 권한 확인 명령어 ls -l 아래는 권한에 대한 설명을 간략히 나타낸 표 유형 r w x d(디렉토리, 폴더) 권한이 없으면 디렉토리 목록을 볼 수 없음 권한이 없으면 해당 디렉토리에 파일을 추가할 수 없음 디렉토리에 접근하는 권한, 권한이 없으면 rw권한이 모두..

    코드스테이츠 후기 (Section2 끝내면서)

    후기를 쓰면서 나를 돌아볼 수 있는 흔적과 경험을 공유할 수 있는 기회가 될 것 같아 Section 1에 이어 쓰려고 합니다. Section 2를 하면서 심리적으로나, 신체적으로나 너무 힘들었습니다. 어떤 것에 도전을 하는 사람들은 도전의 크기가 크던 작던 힘이 드는 것은 분명합니다. 하지만 그것이 쉽게 극복이 되거나 해결될 일은 아니기에 힘들 수밖에 없었습니다. 그럴 때에는 누구에게 위로받는 것도 큰 위안이 되지만, 저의 기준에서 더 위로가 되는 것은 같은 상황인데도 불구하고 더 노력하고, 나보다 더 힘든 사람들이 있다는 것에 힘을 내는 경우입니다. 그래서 사소한 것이라도 써보려 합니다. 우선 Section2 진행하면서 개인적인 일 황당하게도 잇몸 사이에 뼈 조각이 제가 인지하지 못할 만큼 제대로 박히..

    Toy 문제 5

    문제 세로 길이 2, 가로 길이 n인 2 x n 보드가 있습니다. 2 x 1 크기의 타일을 가지고 이 보드를 채우는 모든 경우의 수를 리턴해야 합니다. 해석(수도코드) 입출력 예시 let output = tiling(2); console.log(output); // --> 2 output = tiling(4); console.log(output); // --> 5 2 x 4 보드에 타일을 놓는 방법은 5가지 각 타일을 a, b, c, d로 구분 2 | a b c d 1 | a b c d ------------ 2 | a a c c 1 | b b d d ------------ 2 | a b c c 1 | a b d d ------------ 2 | a a c d 1 | b b c d ------------..

    [Web Server] 기초

    오늘 공부하면서 제일 느꼈던 점은 여러 문서를 찾아보고 스스로 공부하는것이 코드스테이츠 방식이지만 어떤 하나를 구현해보는 것이 가장 좋은 것을 깨달았다. 앞에 내용들 솔직히 눈에도 안들어 왔지만 오늘 실습을 하면서 뒤에 공부 했던것이 조금씩 보이기 시작했다. 코드스테이츠 수업 방식이 흥미를 찾아주진 않아서 직접 스스로 깨닫는게 중요한거 같다. 공부에 무슨 흥미냐 할 수 있지만 적어도 나는 그게 필요한것 같다. 그렇기에 얼른 현업에서 많은 것을 보고싶다. CORS (cross origin resource sharing) 브라우저에서 크로스 도메인 요청은 기본적으로 제한되어있다. 웹 애플리케이션 고도화를 위해 개선 요청 했는데. 서버가 Allow한 범위에서는 허용하게 되었다. 서버에서 Allow 하는 조건들..