[Java] BFS, DFS를 Java로 구현해보자
·
Backend/Java
자바로 그래프 구현하기그래프를 구현하기 위해, 각 노드의 데이터와 다른 노드와의 연결 정보를 가질 수 있는 Node 클래스를 직접 만들어 보겠습니다.1. Node 클래스 정의하기노드는 고유한 데이터(예: 이름)를 가지며, 어떤 노드들과 연결되어 있는지에 대한 목록을 가집니다. 또한, 그래프 탐색 시 이미 방문한 노드인지를 확인하기 위한 상태 값도 필요합니다.import java.util.ArrayList;import java.util.List;import java.util.Objects;public class Node { private String name; // 노드의 이름 private List links; // 연결된 노드 목록 private boolean visited; // 방문..
[Java] 그래프(Graph)란? (비선형 자료구조)
·
Backend/Java
그래프(Graph)란 무엇일까? - 비선형 자료구조의 이해지금까지 우리는 리스트나 배열처럼 데이터가 일렬로 늘어선 선형 구조에 대해 주로 다루었습니다. 이는 데이터와 데이터가 링크로 연결되어 한 줄로 표현될 수 있는 구조입니다. 하지만 만약 데이터 간의 연결이 복잡하게 얽혀 있어 한 줄로 표현할 수 없다면 어떻게 될까요? 이러한 구조를 비선형 구조라고 부르며, 대표적인 예가 바로 그래프입니다.그래프의 기본 구성 요소그래프는 복잡하게 얽힌 데이터 관계를 표현하는 비선형 자료구조입니다. 그래프는 두 가지 핵심 요소로 구성됩니다.노드 (Node): 그래프에서 개별 데이터를 의미합니다. 정점(Vertex)이라고도 부릅니다.에지 (Edge): 노드와 노드를 연결하는 링크(선)입니다. 간선이라고도 부릅니다.에지는 ..
[Java] 자바 정규 표현식(Regular Expression) 정리
·
Backend/Java
정규표현식(Regex)이란?정규표현식은 문자열에서 일정한 규칙을 가진 텍스트 패턴을 표현하는 식입니다.특정 단어나 문자를 찾거나문자열을 원하는 형식으로 바꾸거나데이터 검증, 파싱 등에 폭넓게 사용됩니다.정규표현식을 사용하면 반복적이고 복잡한 문자열 처리 작업을 간결하게 해결할 수 있습니다. 1. 정규표현식 기본 문법패턴설명예시.임의의 문자 1개 (줄 바꿈 제외)a.b → a와 b 사이 임의 문자 1개^문자열 시작 위치^Hello → "Hello"로 시작하는 문자열$문자열 종료 위치end$ → "end"로 끝나는 문자열*앞 문자가 0번 이상 반복ho* → h 다음에 o가 0개 이상+앞 문자가 1번 이상 반복ho+ → h 다음에 o가 1개 이상?앞 문자가 있을 수도, 없을 수도 있음colou?r → colo..
[Java] switch 문 최신 문법까지 정리해보기 (Java 14+)
·
Backend/Java
Java의 switch 문은 특정 변수의 값에 따라 다른 코드를 실행할 때if-else 문보다 코드를 훨씬 깔끔하게 만들어주는 제어문입니다.Java 버전이 올라가면서 switch는 더 안전하고 강력하게 발전했습니다. 핵심만 빠르게 알아보겠습니다. 1️⃣ 일반적인 switch문 (Java 11 이전)가장 전통적인 형태로, case, break, default 키워드를 사용합니다. 변수 값이 case와 일치하면 해당 지점부터 코드를 실행합니다.break를 만나야 switch 문을 탈출합니다.만약 break를 생략하면, 다음 case의 코드가 멈추지 않고 실행되는 "Fall-through"가 발생합니다.Fall-through를 의도적으로 사용하여 여러 case에 대해 동일한 코드를 실행할 수 있습니다.// ..
[Java] replace()와 replaceAll()의 차이점
·
Backend/Java
1️⃣ replace() 모든 일치하는 '문자열'을 바꾼다 replace()는 이름 그대로 문자열을 치환합니다.여기서 가장 중요한 포인트는 첫 번째 인자로 문자열 리터럴(Literal), 즉 '있는 그대로의 텍스트'를 받는다는 점입니다.동작 방식: 지정된 문자열(CharSequence)을 찾아 모두 교체합니다.특징: 정규식(Regex)을 해석하지 않고, 단순 텍스트로만 비교합니다.예시 코드:⚠️replace()는 첫 번째 하나만 바꾸는 것이 아니라, 일치하는 모든 문자열을 바꿉니다 오해 금지!!String text = "hello java, world java!";// "java"라는 문자열을 "kotlin"으로 모두 바꾼다.String result = text.replace("java", "kotlin..
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리
·
Backend/Java
📖약수 구하기 알고리즘코딩테스트나 알고리즘 문제를 풀다 보면 약수를 구하는 문제를 자주 만나게 됩니다하지만 큰 수의 경우 비효율적인 로직으로 인해 시간 초과에 부딪히는 경우가 다반사이번 글을 통해 약수를 구하는 효율적인 알고리즘을 단계별로 정리해보려고 합니다!! 1️⃣일반적인 방법 (O(n)) 가장 직관적으로 생각할 수 있는 방법은 1부터 n까지 모든 수를 확인하는 것입니다.// 12의 약수를 구하는 예시int count = 0;for (int i = 1; i 결과: 12의 약수는 1, 2, 3, 4, 6, 12 총 6개 해당 방법은 O(n)의 시간복잡도를 가지므로, n이 커지면 커질수록 오래 걸려서 시간 초과가 발생할 수 있습니다.1단계 방법의 속도를 개선해 보기 위해 먼저 한 가지 방법을 생각해 보..