본문 바로가기
반응형

분류 전체보기42

그리디 알고리즘(Greedy Algorithm) 개념 및 구현 Greedy는 사전 상 탐욕스러운, 욕심 많은의 의미를 가지고 있다. 그래서 탐욕 알고리즘이라고도 한다.  탐욕 알고리즘은 "최적해"를 구하는데 사용되는 근사적인 방법이다. "최적해"를 구한다는 보장은 없지만 단순하게 동작하기 때문에 실용적이다.  최적해를 얻을 수 있는 조건 1. 탐욕스러운 선택 속성(Greedy choice property)탐욕스러운 선택 속성이 존재한다는 말은 앞의 선택이 이후의 선택에 영향을 주지 않는다는 뜻이다.   2. 최적 부분 구조 조건(Optimal Substructure)최적 부분 구조 조건은 문제에 대한 최적해가 부분 문제에 대해서도 역시 최적해라는 것이다.   "탐욕스러운 선택 속성과 "최적 부분 구조 조건"을 가지고 있는 경우는 탐욕 알고리즘을 이용해서 항상 최적.. 2024. 5. 20.
시간/공간복잡도 개념(코테 대비 팁) 1. 시간/공간 복잡도를 알아야 하는 이유 2. 빅오(Big O)표기법 : 알고리즘의 성능을 분석할 때 사용하는 수학적 표현 방식이다. 이는 특히 알고리즘이 처리해야할 데이터의 양이 증가할 때, 그 알고리즘이 얼마나 빠르게 실행되는지 나타낸다. 여기서 중요한 것은 알고리즘의 정확한 실행 시간을 계산하는 것이 아니라, 데이터 양의 증가에 따른 성능의 변화 추세를 이해하는 것이다.  - 시간 복잡도 : 입력된 N의 크기에 따라 실행되는 조작의 수  1. O(1) - 상수 시간 : 입력 데이터의 크기에 관계없이 알고리즘의 실행 시간이 일정하다. 예) 배열에서 인덱스를 사용하는 경우2. O(n) - 선형 시간 : 알고리즘의 실행 시간이 입력 데이터의 크기에 비례하여 증가한다. 예) 배열의 검색, 배열의 모든 요.. 2024. 5. 13.
DFS와 BFS 개념 및 구현 DFS(Depth-First Search) : 그래프를 탐색할 때, 현재 위치에 인접한 노드를 우선적으로 선택하여 깊이가 증가하는 방향으로 탐색하는 알고리즘  구현 : 재귀를 이용 (그래프 표현 방법 : 인접 행렬)static int[][] graph; static boolean[] visited;static void dfs(int node){ visited[node] = true; System.out.print(node + " "); for (int i = 0; i   BFS(Breadth First Search) : 시작 정점부터 옆으로 좌우로 탐색하는 너비 우선 탐색 방법 구현 : 큐를 이용 (그래프 표현 방법 : 인접 행렬)static int[][] graph;static b.. 2024. 5. 13.
[자료구조] 스택(stack) ,큐(Queue) / [알고리즘] 이진 탐색(binary search) 1 . 스택(stack)은 모든 원소들의 삽입과 삭제가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료구조이다.삽입과 삭제가 일어나는 리스트의 끝을 top이라고 하고, 다른 한쪽 끝을 bottom이라고 한다.  즉, 후입선출(Last in First Out - LIFO)이라고 한다.기록을 쌓아가며 직전의 상태를 복원해야하는 상황에 유용하다. ex) 웹 브라우저 뒤로 가기, 프로그램 실행 취소, 함수 호출 등등  기억하기 쉬운 예시 : 펜케이크 펜케이크를 다 굽고 그릇 위에 옮긴다. 접시에 한 개씩 쌓아간다. 이때 손님이 펜케이크를 달라고 한다. 그럼 어떤 펜케이크를 줄 것인가? 사회통념상 쌓던 펜케이크 중에서 맨 위에 있는 펜케이크를 줄 것이다. 펜케이크 굽는 것을 멈추고 그릇에 쌓여있던 .. 2024. 5. 6.
인텔리제이(IntelliJ) 단축키 정리(계속 추가) 옵션 확인 : Command + P 생성자?(Generate) : Command + N코드 완료 ex) 세미콜론 안썼는데 완성해주기 : Command + shift + enter   show context Action(옵션 확인) : option + enterExtract -> Introduce Variable : option + Commad + V(변수 관련 단축키?)Extract method : Ctrl + tcreate Test : Command + Shift + t최근 파일 조회 : Command + E오버라이드 조회 : Ctrl + O 2024. 4. 30.
스프링 웹 개발 기초(정적 컨텐츠, mvc, API) 내가 공부한 걸 내 언어로 정리를 해보려고 한다. 처음에는 어색해도 꾸준히 해보겠다. 스프링 공부를 다시 시작했다. 김영한님의 스프링입문 강의를 듣고 있다.  스프링은 자바의 프레임워크이다. 스프링부트를 통해 실행된다고 볼 수 있다. 스프링부트 프로젝트를 생성하는 사이트이다. https://start.spring.io/  지금 공부할 때는 3.2.5버전으로 생성했다. 자바는 21을 썼다.  웹 개발의 기초라 함은 화면에 표시되는 것과  api로 나눠진다고 볼 수 있다.  1. 정적 컨턴츠정적컨텐츠는 html을 바로 보여주는 것?이다. html을 찾아 화면에 표시해준다. 처리과정은 내장 톰켓 서버 -> resources:static/hello-static.html -> 웹브라우저 2. MVC와 템플릿 엔진.. 2024. 4. 30.
"미래의 나"와 연결됐다. 퓨처셀프 책을 읽기 전에는 목표라고 생각하면 그저 막연하게 생각을 했다. 목표를 달성하면 좋고 못해도 그저 시간이 지나가기에 별로 중요하게 생각을 하지 않았다. 그리고 달성하지 못할까봐 목표를 시작하지 않았을 때도 많았다. 위에 두가지는 퓨처셀프를 읽고 해결이 됐다. 드디어 미래의 나와 연결이 됐다. 1. 목표를 달성하면 좋고 못해도 그저 시간이 지나가기에 별로 중요하게 생각을 하지 않았다. 미래의 나와 단절됐던 것이다. "허시필드는 사람들 대부분의 미래의 나를 생각하는 데 많은 시간을 쓰지 않는다는 사실을 발견했다. 사람들은 생각 없이 소셜미디어로 시간을 보내거나 폭식이나 과소비를 하는 등, 지금 당장 도파민이 잠깐 생기고 마는 행동에서 벗어나지 못한다. 그렇게 단기적인 보상을 추구하면 장기적으로 대.. 2024. 1. 14.
[JAVA] String java에는 문자열을 나타내는 String 클래스가 있다. String name = "홍길동" 이렇게 표현하고 쌍따움표를 써야한다. 홑따움표는 문자를 나타내는 char에 써야한다. String 클래스는 한번 인스턴스가 생성하면 수정할 수 없다.(immutabe object) 새 String을 만들어 바꿀 수는 있다. String 표현방식은 두가지가 있다. 1. String a = "test"; 2. String b = "test"; 3. String c = new String("test"); 4. String d = new String("test"); 1번은 constant string pool에 저장. text가 같으면 같은 저장공간을 바라본다. 2번은 java heap에 저장. 1번 == 2번(tru.. 2023. 12. 18.
신입 개발자가 가져야 하는 마인드(feat.비전공자가 개발자로) 벌써 입사한지 3개월이 됐다. 수습에서 정규직으로 전환도 됐다. 뿌듯했다. 작년까지만 해도 나는 영업관리자로 근무를 하고 있었다. 2022년 10월부터 열심히 공부해 올해 1월 부트캠프 수료하고 2월에 취직을 했다. 철학과 출신 비전공자가 개발자가 된 것이다. 아직 부족한게 많다고 느끼고 있다. 무엇을 해야 할까 고민하다가 책을 읽어야 겠다고 생각을 했다. 부트캠프 동기들과 첫 책을 시작했다. 첫 책은 김창준님이 지은 [함께 자라기] 이다. 유튜브에서 배달의 민족 기술이사였던 김영한님이 추천해서 골랐다. 지속적으로 개발자의 길로 나아가려면 어떻게 해야하는지 그리고 애자일이 뭔지 궁금했다. 이제 막 수습 딱지를 뗀 나에게는 안성맞춤이었다. 많은 내용들이 나오지만 평생 까먹고 싶지 않은 3가지를 소개하려고 .. 2023. 5. 26.
정규화와 반정규화 1. 정규화(Normaliztion) 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정이다. 1) 제1정규형 - 모든 속성은 반드시 하나의 값만 가져야 한다. 2) 제2정규형 - 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 3) 제3정규형 - 주식별자가 아닌 모든 속성 간에는 서로 종속이 될 수 없다. 생각! 정규화를 공부하던 중 제2정규형과 제3정규형이 헤깔렸다. 조금 차이점이 있었다. 제2정규형을 만족하는 경우는 일반속성이 주식별자에 종속이 되어야 한다. 근데! 주식별자에 모두 종속이 되더라도 일반속성들끼리 서로 종속관계가 될 수도 있다. 그래서 제3정규형이 필요한 것이다! 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상.. 2023. 4. 16.
반응형