정렬(Sort)정렬 알고리즘이란 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘이다.그럼 정렬은 왜 하는 걸까??내가 편의점에서 아르바이트할 때를 생각해 보면 음료 진열대 뒤쪽에서 음료들을 하나씩 넣어가면서 진열해야 된다. 여기서 중요한 것은 유통기한이 빠른 순서대로 넣는 것이다. 하지만 창고에 쌓인 음료들을 보면 유통기한이 빠른 순서대로 정렬되지 않은 경우를 많이 경험했다.창고에 있는 음료들의 유통기한을 빠른 순서대로 정렬하면 진열대에 음료를 넣을 경우 더 빠르게 작업을 할 수 있을 것이다.이러한 정렬 알고리즘에는 어떤 종류가 있는지 확인해 보면종류설명시간복잡도메모리안정성최고평균최악버블 정렬(Bubble Sort)데이터의 인접 요소끼리 비교하고, swap 연산을 수행하며 정렬하는..
분류 전체보기
그래프(Graph)그래프는 자료구조 중 하나로 노드(Node, 정점)와 에지(Edge, 간선)로 구성된 집합으로 비선형 자료 구조이다.노드는 데이터를 표현하는 단위고 에지는 노드를 연결해 준다.언뜻 보면 그래프와 트리가 비슷하게 보일 수 있는데 차이점으로는 그래프는 사이클이 발생하지만, 트리는 사이클이 발생하지 않는다는 차이가 있다. 그래프의 종류그래프 자료구조는 다양한 형태를 가지고 있는데 그중에서 간단하게 3개만 살펴보자. 무방향 그래프무방향 그래프는 말 그대로 정점을 이어주는 간선에 방향성이 없는 그래프로 순서가 지정되지 않은 쌍이다.무방향 그래프에서 정점 Vi와 Vj를 연결하는 간선을 (Vi , Vj)로 표현하는데 방향이 없기 때문에 (Vi , Vj)와 (Vj , Vi)는 같은 간선이다. 방향 그..
DFS(깊이 우선 탐색)그래프 완전 탐색 기법 중 하나로 코딩 테스트에서 가장 많이 사용되는 알고리즘이다.DFS(너비 우선 탐색)의 원리그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘이다.재귀 함수 or 스택 자료구조를 이용하여 구현한다. (후입 선출 특성을 가지고 있음)시간 복잡도는 O(V + E) - V: 노드 수, E: 에지 수한 번 방문한 노드는 다시 방문하면 안되며 따라서 노드 방문 여부를 체크할 배열이 필요하다.위의 그래프를 사진과 같이 인접 리스트로 표현할 수 있다.※ DFS를 구현할 경우 재귀 함수를 이용하기 때문에 스택 오버플로우에 유의해야 한다.DFS는 어떤 한 분기를 먼저 최대 깊이까지 ..
·자바
생성자(Constructor) 생성자는 인스턴스를 초기화 해주는 메서드를 의미한다. 컴파일러가 자동적으로 생성해주는 기본 생성자, 사용자가 직접 생성하는 매개변수가 있는 생성자로 구분한다. 위의 코드처럼 생성자는 인스턴스 변수를 초기화 해주는데 직접 객체를 생성하고 변수를 하나씩 초기화 해주는 것이 아닌 생성자를 통해서 변수를 초기화하여 코드의 양을 줄일 수 있게 해준다. 그럼 생성자를 만들기 위해서는 어떤 조건이 있을까 생성자의 조건 1. 생성자 이름은 클래스와 이름이 같아야 한다. 2. 반환값이 존재하지 않는다. 3. 모든 클래스는 반드시 생성자를 가져야 한다. 먼저 생성자의 이름은 클래스 이름과 같아야 한다. 코드와 같이 Car 라는 클래스에서 만들어진 생성자는 Car 이름을 가지고 있다. Car ..
·자바
오버로딩(Overloading) 오버로딩은 한 클래스 안에 같은 이름의 메서드 여러 개를 정의한 것을 의미한다. 당장 자바에서 많이 사용하는 println 메서드를 확인해보면 이름은 같은 메서드지만 다른 데이터 타입을 받는 것을 알 수 있다. 우리가 파스타를 만든다고 상상을 해보자. 먼저 우리가 파스타를 만들어도 어떤 재료가 들어가는지에 따라서 파스타의 종류가 바뀐다. 위의 코드를 보면 똑같은 makePasta 메서드를 사용하여 파스타를 만들지만, 들어가는 재료에 따라서 다른 파스타를 반환해준다. 메서드를 오버로딩하면 이름이 같은 새로운 메서드를 만들 수 있다. 그렇다면 오버로딩을 활용할 때 고려해야 되는 조건은 뭐가 있을까? 오버로딩의 조건 3가지 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수..
스택(Stack)스택(Stack)은 삽입과 삭제 연산이 후입선출(LIFO, Last In First Out)로 이루어진 선형 자료구조이다.가장 마지막에 삽입된 요소가 가장 먼저 삭제되는 구조로 삽입과 삭제가 한쪽에서만 일어난다.- 스택은 DFS(깊이 우선 탐색), 백트레킹 종류의 코딩 테스트에 사용된다. 요리를 배웠던 기억을 되살려 햄버거를 가지고 스택을 표현해보려고 한다.우리가 햄버거를 만든다고 상상해보자.햄버거 재료들을 차곡차곡 쌓아서 맛있게 만들었지만, 만약 중간에 들어갈 토마토를 까먹었다고 하면 어떻게 해야 될까?토마토가 위치해야 되는 자리까지 위에서부터 하나씩 뺄 것이다. 빵에서부터 치즈까지 빼고 난 후 토마토를 다시 쌓고 뺏던 재료들을 다시 쌓는다. 스택에서 사용되는 주요 메서드- top():..
배열(Array)- 배열은 메모리의 연속된 공간에 값이 채워져 있는 형태의 자료구조이다.- 배열은 인덱스를 통해 값을 바로 접근할 수 있다.- 배열의 단점으로는 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다.- 위의 사진처럼 6이라는 값은 3과 4 사이에 삽입하려면 4와 5를 한 칸씩 뒤로 옮겨야 된다. 만약 배열의 길이가 1,000,000 정도 된다면 하나의 값을 삽입하기 위해서 많은 양의 데이터를 움직여야 하는 단점이 있다.- 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다.- 구조가 간단하므로 코딩 테스트에서 제일 많이 사용된다. 리스트(List)리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 선형 자료구조이다.리스트는 배열과 ..
·자바
변수(Variable) 변수는 크게 클래스 영역과 메서드 영역으로 나뉘어 3가지로 분류할 수 있다. iv(Instance variable, 인스턴스 변수 - 클래스 영역) 인스턴스가 생성되었을 때 만들어지는 변수로 개별적으로 값을 유지해야 하는 값을 저장한다. ※ 인스턴스를 넓은 범위에서 객체라 부르기 때문에 서로 같은 의미라고 생각하면 된다. cv(Class variable, 클래스 변수 - 클래스 영역) - 클래스가 메모리에 올라갈 때 생성되며 공통적으로 값을 유지해야 하는 값을 저장한다. - 변수에 static을 붙여야 클래스 변수가 된다. - 클래스 변수는 객체가 생성될 때 다른 공간에 하나만 생성된다. ※ 객체를 생성해서 사용할 때 클래스 변수는 해당 클래스 명을 명시해줘야 한다. 하지 않아도 ..
·자바
클래스(Class) 우리가 어떤 가전 제품을 만들 때 해당 제품의 설계도가 있어야 만들 수 있다. 클래스는 제품(객체)를 만드는데 사용되는 설계도로 어떤 제품인지 정의하고 생성하는데 사용된다. 클래스의 3가지 관점 클래스는 다음의 3가지 관점으로 볼 수 있다. 1. 설계도 앞서 언급한 내용처럼 어떠한 제품(객체)를 만드는데 필요한 설계도로 볼 수 있다. 2. 데이터 + 함수 클래스는 여러 가지 데이터 타입들과 함수를 묶을 수 있다. Class Time { int hour; int minute; int second; } 3. 사용자 정의타입 클래스는 원하는 타입을 직접 만들 수 있다. 객체(Object) 객체는 설계도(클래스)를 바탕으로 만들어진 제품(객체)을 의미한다. 설계도(클래스)를 바탕으로 에어컨(..
독서가 나에게 필요한 이유 알고리즘 테스트를 해보면서 문제를 이해하는데 오랜 시간이 걸린다는 것을 알게되었다. 물론 여러 번 풀면 실력도 늘고 금방 풀게 되겠지만, 그렇게 푸는 것이 과연 제대로 풀었다고 할 수 있을까란 의문이 생겼다. 개발자가 되어서 고객의 요구사항에 맞는 소프트웨어를 개발할 때 내가 과연 고객의 요구사항을 다 이해할 수 있을까? 아니면 뭔가 문제가 되는 부분이나 요구사항에서 말도 안되는 부분을 발견 했을 때 고객을 잘 설득할 수 있을까? 같이 협업하는 동료들에게 기술의 필요성을 설명하고 왜 적용시키고 바꿔야되는지 논리적으로 설명할 수 있을까? 이러한 문제가 나중에 취업을 하고 나서 빈번하게 발생할거라 생각이 들어서 독서의 필요성을 느꼈다. 왜 굳이 독서를 하려고 하는가 위에서 설명한 ..
문제 정의 최근 정처기 실기, ssafy, 포스코를 다 떨어져서 자신감이 많이 떨어져 있다 자신감이 바닥으로 가니깐 뭔가를 시도하는 게 부담되고 걱정부터 앞선다 이렇게 살면 진짜 답이 없을 것 같다. 어떻게 해결할까 하루에 두 번 동기부여 영상 시청하기 아침에 영상을 시청해서 하루를 긍정적으로 살아보기 중간에 기억이 남는 영상들은 따로 저장해서 다시 보기 추후 일정 시작: 2023-06-27 중간점검: 2023-08-15 끝: 2023-10-05
삼오백일 챌린지가 뭐지? 말 그대로 30일, 50일, 100일, 1년 동안 한 가지를 쭉 해보자 무슨 일이 있더라도 어떤 상황이 벌어지더라도 하나를 무조건 꾸준히 해보자 삼오백일 챌린지를 하는 이유 내 개인적인 생각이지만 습관을 들이기에 적당한 시간인 것 같다. 어떠한 일을 꾸준히 했을 때 어떤 변화가 생길지 직접 경험해보고 싶다. 작은 성취감으로 자신감을 높이고 싶다. 삼오백일 동안 진행 계획 5분이고 10분이고 일단 해보는 게 제일 중요한 것 같다 괜히 처음부터 목표치를 많이 잡았다가 금방 실패할 것 같다 차라리 목표를 처음부터 작게 잡자 편하고 쉽게 가자