분류 전체보기 87

Graph | 깊이 우선 탐색 (Depth-First Search)

1. DFS 알고리즘 구현 자료구조 스택과 큐를 활용함 * needVisit 스택과 visited 큐, 두 개의 자료 구조를 생성     BFS 자료구조는 두 개의 큐를 활용하는데 반해, DFS는 스택과 큐를 활용한다는 차이가 있음을 인지해야 함  public class DFSSearch { public ArrayList dfsFunc(HashMap> graph, String startNode) { ArrayList visited = new ArrayList(); ArrayList needVisit = new ArrayList(); needVisit.add(startNode); while(needVisit.size() > 0) { ..

Coding Test 2024.10.17

Graph | 너비 우선 탐색(Breadth-First Search)

1. BFS와 DFS란?대표적인 그래프 탐색 알고리즘  * 너비 우선 탐색(Breadth First Search) : 정점들과 같은 레벨에 있는 노드들(형제 노드들)을 먼저 탐색하는 방식 * 깊이 우선 탐색(Depth First Search) : 정점의 자식들을 먼저 탐색하는 방식  2. Java로 그래프를 표현하는 방법Java Collection Framework에서 제공하는 Hashmap과 ArrayList를 활용해서 그래프를 표현할 수 있음 그래프 예와 Java 표현 HashMap> graph = new HashMap>();graph.put("A", new ArrayList(Arrays.asList("B", "C")));// 등등3. BFS 알고리즘 구현자료구조 큐를 활용한 * needVisit 큐..

Coding Test 2024.10.16

Graph| 그래프 이해와 자료 구조

1. 그래프(Graph)란?그래프는 실제 세계의 현상이나 사물을 정점(Vertex) 또는 노드(Node)와 간선(Edge)로 표현하기 위해 사용 2. 그래프(Graph) 관련 용어* 노드(Node) : 위치를 말함. 정점(Vertex)라고도 함 * 간선(Edge) : 위치 간의 관계를 표시한 선으로, 노드를 연결한 선이라고 보면 됨(link 또는 branch 라고도 함)* 인접 정점(Adjacent Vertex) : 간선으로 직접 연결된 정점(또는 노드)* 참고 용어    * 정점의 차수(Degree) : 무방향 그래프에서 하나의 정점에 인접한 정점의 수     * 진입 차수(In-Degree) : 방향 그래프에서 외부에서 오는 간선의 수     * 진출 차수(Out-Degree) : 방향 그래프에서 외..

Coding Test 2024.10.16

탐색 알고리즘 | 이진 탐색(Binary Search)

1. 이진 탐색(Binary Search)이란?탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법 * 데이터가 정렬되어 있어야함  2. 분할 정복 알고리즘과 이진 탐색 분할 정복 알고리즘(Divide and Conquer)Divide : 문제를 하나 또는 둘 이상으로 나눈다. Conquer : 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다. 이진 탐색 Divide : 리스트를 두 개의 서브 리스트로 나눈다. Comquer : 검색할 숫자(search) > 중간값이면, 뒷부분 / import java.util.ArrayList;public class BinarySearch { public boolean searchFunc(ArrayList dataLi..

Coding Test 2024.10.16

탐색 알고리즘 | 순차 탐색(Sequential Search)

1 . 순차 탐색(Sequential Search)이란?탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미 데이터가 담겨있는 리스트를 앞에서부터 하나씩 비교해 원하는 데이터를 찾는 방법 ArrayList testData = new ArrayList();for(int i = 0; i 순차탐색 알고리즘import java.util.ArrayList;public class SequencialSearch { public int searchFunc(ArrayList dataList, Integer searchItem) { for(int index = 0; index

Coding Test 2024.10.16

Design Pattern | 브리지 패턴(Bridge Pattern)

브리지 패턴(Bridge Pattern)은 GoF 디자인 패턴 중 하나로, 기능과 구현을 분리하게 독립적으로 확장할 수 있도록 돕는 구조적 디자인 패턴입니다. 이 패턴은 객체지향 설계에서 클래스 폭발 문제를 해결하기 위해 사용되며, 두 개 이상의 독립적인 자원을 클래스 계층 구조로 분리해 각각의 계층을 따로 개발하고 확장할 수 있게 합니다.  1. 브리지 패턴의 정의와 의도브리지 패턴은 두 계층(추상화와 구현)을 연결하는 다리와 같습니다. 즉, 클라이언트는 상위 계층인 추상화와 작업하고, 추상화는 하위 계층인 구현에 작업을 위임합니다. 이 패턴의 목적은 하위 계층(구현부)과 상위 계층(추상화)을 분리하여 독립적인 확장을 가능하게 만드는 것입니다. 2. 브리지 패턴을 사용하는 의도이 패턴을 사용함으로써 기..

Design Pattern 2024.08.29

CT | 백준 - 11286번 절대값 힙

https://www.acmicpc.net/problem/11286문제 설명이 문제는 정수들을 입력받아 다음과 같은 두 가지 작업을 수행하는 프로그램을 작성하는 것입니다.정수 입력: 정수 x를 입력받았을 때, x가 0이 아닌 경우 해당 숫자를 우선순위 큐에 추가합니다.0 입력: 만약 0이 입력되면, 현재 큐에 있는 수 중에서 절대값이 가장 작은 수를 출력하고 해당 수를 큐에서 제거합니다. 만약 절대값이 동일한 수가 여러 개 있다면, 그 중에서 가장 작은 수를 출력합니다. 큐가 비어있을 경우에는 0을 출력합니다.public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextI..

Coding Test 2024.08.27

CT | Java에서 효율적으로 ArrayList에서 최대값을 찾고 제거하기(백준 - 11279)

서론Java에서 ArrayList를 사용해 데이터를 처리할 때, 종종 가장 큰 값을 찾고 이를 제거하는 작업을 해야 할 때가 있습니다.간단하게 ArrayList와 Collections를 사용하여 구현할 수 있지만, 큰 데이터셋을 다룰 때 성능 문제가 발생할 수 있습니다.이 글에서는 ArrayList를 사용한 기본 접근 방식과 성능을 개선할 수 있는 방법을 비교해보겠습니다.문제 정의우리는 정수 리스트에서 사용자가 0을 입력할 때마다 현재 리스트에서 가장 큰 값을 출력하고, 그 값을 리스트에서 제거하는 프로그램을 작성하려고 합니다. 사용자가 0이 아닌 값을 입력하면, 리스트에 그 값을 추가합니다. 이 작업을 효율적으로 처리하는 방법을 탐구해보겠습니다. 백준 : 최대 힙 문제 | 11279https://www..

Coding Test 2024.08.27

Spring | MultipartFIle에서 파일 이름 가져오기 문제 해결, Normalize 유니코드

1. 문제 발견최근 파일 업로드 기능을 구현하던 중, 특정 파일명을 검색할 때 예상치 못한 문제가 발생했습니다. MultipartFile의 getOriginalFilename() 메서드를 사용하여 파일 이름을 받아 저장하던 중 파일 이름에 한글이 포함된 경우, 데이터베이스에서 LIKE 연산자를 사용한 부분 검색이 정상적으로 작동하지 않는 현상이 발생했습니다. 예를 들어, "스크린샷"이라는 단어가 포함된 파일명을 검색하려고 했으나, 결과가 제대로 반환되지 않았습니다.2. 문제 원인문제를 분석한 결과, 이 현상은 운영체제(OS) 간의 유니코드 처리 방식 차이로 인해 발생한 것으로 밝혀졌습니다. 특히, MacOS와 Windows에서 한글을 처리하는 방식이 달랐습니다:MacOS는 한글을 NFD(Normaliza..

개발Log 2024.08.26

[HTML] 브라우저 자동완성 문제 해결: autocomplete="off" + 뒤로가기 잔상?

ADMIN 개발을 진행하다, 뒤로가기 액션에서 select박스의 잔상이 남아있는 현상이 있었습니다!분명 소스는 option 1이 selected 되었지만, 잔상은 이전 타입 그대로라 왜 캐시가 남아있지 하고 고민하던 중 자동완성 기능이라는 것을 깨달았습니다 :) 웹 개발 중 자주 마주치는 문제 중 하나는 브라우저의 자동 완성 기능으로 인한 불편함입니다.특히, 사용자가 폼 필드를 작성할 때 브라우저가 이전 입력 값을 자동으로 제안하거나 채워 넣는 기능이 원하지 않는 동작을 초래할 수 있습니다. 이 문제를 해결하기 위해 autocomplete="off" 속성을 사용하는 방법에 대해 소개하겠습니다.문제 발생자동 완성 기능은 일반적으로 사용자 경험을 향상시키기 위해 설계되었지만, 특정 상황에서는 문제가 될 수 ..

Frontend 2024.08.23