본문 바로가기

Java125

[Java] 자료구조 - 트리, 이진 트리 [Java] 자료구조 - 트리, 이진 트리 트리는 노드와 간선 (링크)로 만들어진 자료구조다 트리는 사이클이 없고, 계층적 구조를 나타낼 때 사용된다 트리는 모든 노드들이 연결이 되어 있어야 한다 만약 끊기게 된다면 새로운 트리가 만들어지는 것이다 노드가 N개 이면 간선의 갯수는 N-1이다 트리 용어 노드 (Node) : 트리 안의 데이터 또는 값 에지 (Edge) : 노드를 연결하는 링크 루트 노드 (Root) : 트리의 제일 상단에 위치한 하나 밖에 없는 노드 (루트 노드는 부모 노드가 없다) Leaf 노드 : 트리의 제일 하단에 위치한 노드 (자식 노드가 없다) 부모 노드 : A 는 B와 C의 부모 노드다. 연결된 노드의 상위 노드 자식 노드 : B와 C는 A의 자식 노드다. 연결된 노드의 하위 노.. 2023. 6. 22.
[Java] 자료구조 - 힙 [Java] 자료구조 - 힙 힙은 최소힙이 있고, 최대힙이 있다 최소힙은 부모 노드가 항상 자식 노드보다 작은 숫자가 들어간다 즉 최소힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 작은 숫자로 이루어져 있다 최대힙은 부모 노드가 항상 자식 노드보다 크기가 크다 즉 최대힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 큰 숫자로 이루어져 있다 힙은 이진 트리로 만들어져 있다 n의 자식 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때에는 왼쪽 노드는 2n + 1 | 2n 오른쪽 노드는 2n + 2 | 2n + 1 부모 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때 (n - 1) / 2 | n / 2 값을 추가하기 (MaxHeap) .. 2023. 6. 18.
[Java] 연결리스트 [Java] 연결리스트 연결리스트 (Linked List) 각 노드에 데이터와, 포인터가 있고, 노드끼리 연결되어 있는 것을 연결리스트라고 한다 여기서 포인터는, 이전 노드 또는 다음 노드와의 연결을 담당한다 제일 처음에 있는 노드를 Head라고 한다 제일 마지막 노드의 포인터는 NULL과 연결이 되어 있다 데이터 추가/삭제는 비교적 쉽게 실행되지만, 인덱스가 없다는 점에서, 데이터를 찾으려면 Head부분부터 순회를 해야 한다 (탐색 속도 저하) 연결 리스트 종류 단일 연결 리스트 (Single Linked List) 노드에 다음 노드가 참조된 제일 간단한 형태의 연결 리스트다 일반적으로 큐를 구현할 때에 사용이 된다 Head가 제일 중요하여, Head를 잃어버린다면, 데이터 전체를 사용을 못 한다 이중.. 2023. 6. 16.
[Java] 해시 테이블 [Java] 해시 테이블 해시 테이블 key와 value를 저장하는 자료구조다 (순서는 중요하지 않다) key와 value를 묶어서 저장한다 Key 값에 Hash Function을 적용하여 배열의 고유한 index를 생성하고, 그 index를 통해 값을 저장 또는 검색을 한다 저장 되는 공간을 bucket이라고도 부른다 해시 충돌 위에서 Key 1을 함수를 통해 나온 값과 Key 2를 해시 함수를 통해 나온 값이 동일하게 나온다면 충돌이 일어난다 개방 주소법과 분리 연결법으로 이러한 충돌을 해결하려고 한다 개방 주소법 hash와 value가 1대1 관계를 유지한다 만약에 충돌이 일어났을 경우, 다른 빈 공간의 hash를 찾고, 저장을 한다 선형 탐사법, 제곱 탐사법, 이중 해싱 등이 개방 주소법으로 분류.. 2023. 6. 15.
Java 문제풀이 (Programmers) Java 문제풀이 (Programmers) 같은 숫자는 싫어 배열이 주어진다 배열 안에 숫자가 주어지는데, 연속으로 나열된 같은 숫자는 하나의 숫자로 반환한다 예) [1, 1, 3, 4, 4, 4, 4, 5, 6, 6, 6, 7] => [1, 3, 4, 5, 6, 7] 1, 4, 6은 모두 연속으로 같은 숫자로 나열되어 있어, 하나로 줄인다 간단하게, 먼저 제일 앞에 있는 숫자를 배열에 미리 넣는다 그 다음은 인덱스 1로 시작하여, 전의 숫자와 비교하며, 전의 숫자와 다르면, answer 배열에 해당 숫자를 넣으면 된다 import java.util.*; public class Solution { public ArrayList solution(int []arr) { ArrayList answer = ne.. 2023. 6. 14.
[Java] Queue [Java] Queue Queue는 선입선출, FIFO (First In First Out)으로 제일 먼저 들어간 값이, 제일 먼저 나오는 자료구조다 식당 줄을 서서 기다리는 것과 같다 (제일 먼저 와서 기다린 사람이, 제일 먼저 들어간다) Queue 클래스를 이용하여 사용할 수 있다 import java.util.LinkedList; import java.util.queue; Queue queue = new LinkedList(); Enqueue 는 값을 큐에 넣는 것이다 // enqueue 메서드 queue.add(value); queue.offer(value); Dequeue는 값을 큐에서 빼는 것이다 (위에 설명과 같이, 제일 먼저 들어온 값이 제일 먼저 빠진다) // dequeue 메서드 que.. 2023. 6. 13.
[Java] 백준 25556 포스택 [Java] 백준 25556 포스택 풀이 랜덤으로 되어있는 순열을, 4개의 스택을 이용해서 오름차순으로 정렬을 하는 것이다 여기서 중요한 것은 각 모든 스택은 오름차순으로 나열이 되어 있어야 한다 이유는, 제일 큰 수를 오른쪽부터 왼쪽으로 숫자가 1씩 떨어지면서 정렬을 해야 하는 상황이다 그래서 만약에 스택에 모든 숫자를 넣을 수 있다면, 오름차순으로 정렬이 가능하다 반대로 스택에 숫자 하나라도 못 넣으면, 정렬이 불가능해진다 코드를 보게 되면, 스텍에 값들을 넣었지, 빼는 것은 생략했다 import java.util.Stack; import java.util.Scanner; import java.util.ArrayList; public class Main{ public static void main(S.. 2023. 6. 13.
[TIL] Java (Regex) [TIL] Java (Regex) Regex란? Regular Expression으로 특정 패턴을 찾아서, 문자를 찾거나 교체를 할 수 있다 예를 들어, 전화번호 형태로 입력을 안 하면, 뒤로 못 넘어갈 수 있도록 만들 수 있다 또는 한국어로만 입력이 가능하게 설정을 할 수 있다 Regex는 java.util.regex.* 를 통해서 사용이 가능하다 클래스 Pattern Class : 문자를 찾을 때에, 특청 패턴을 정의한다 Matcher Class : 패턴을 찾을 때에 사용한다 PatternSyntaxException Class : 정규식 (Regular Expression)에 에러를 보여준다 예시 if (Pattern.matches("^[ㄱ-ㅎ가-힣]*$", candidateName) == true).. 2023. 6. 12.
프론트엔드와 백엔드 차이 프론트엔드와 백엔드 차이 제로베이스 백엔드 스쿨 내 경험 멀티캠퍼스 풀스택 개발 과정을 배우며, 프론트엔드와 백엔드를 모두 경험할 수 있었다. 실제로 프로젝트를 할 때에 모두 풀스택으로 참여를 했다. 처음부터 기능을 구현하고, 구현한 기능을 시각화 하는 재미가 있었다. 혼자 모든 것을 구현하니, 시간은 걸렸지만, 성취감은 배로 쌓이게 되었다. 프론트엔드와 백엔드 차이 화면 프론트엔드는 화면으로 보여지는 것을 얘기한다. 프론트엔드 쪽을 다루며 UI/UX (User Interface / User Experience)에 대해 많이 들었다. 즉, 유저들이 해당 서비스를 사용할 때에, 직접적으로 상호 작용하는 부분이 프론트엔드이다. 좀 더 생각하면, 프론트엔드를 통해 새로운 유저를 유치하거나, 기존 유저들을 유지.. 2023. 6. 12.