💻 백엔드개발/Java 10

[JAVA] DFS 깊이 우선 탐색

DFS 깊이 우선 탐색: DFS(Depth First Search)는 하나의 정점으로부터 시작하여 깊은 곳 우선으로 탐색하여, 더 이상 갈 곳이 없을 경우 이전 단계로 되돌아가 다른 경로를 탐색해 최종적으로는 연결된 모든 정점을 탐색하는 방법이다.  📍 DFS 특징재귀적 또는 스택을 이용해 구현한다.각 정점의 방문 여부를 확인하기 위해 방문 배열을 사용한다. (예. int[] visited)그래프가 순환 구조를 가질 경우, 무한 루프 방지를 위해 반드시 방문 여부를 체크해야 한다. 📍 DFS 시간 복잡도인접 리스트 사용 시 : O(V+E) → V: 노드 수/ E: 간선 수인접 행렬 사용 시 : O(V^2) 📍 DFS 동작 알고리즘1. 시작 노드를 방문하고 방문 여부를 체크한다.2. 해당 노드와 연결..

[JAVA] BFS 너비 우선 탐색

BFS(Breadth-First Search) , 너비 우선 탐색: 그래프 또는 트리 탐색 알고리즘 중 하나로 너비 우선으로 탐색을 진행한다. BFS는 특정 노드에서 시작해 인접한 노드들을 먼저 탐색한 뒤 그 다음 단계의 노드들을 탐색하는 방식으로 작동한다. 📍BFS의 특징너비 우선 탐색 : 현재 노드와 인접한 모든 노드를 탐색한 후에 다음 깊이로 진행.최단 경로 보장 : 가중치가 없는 그래프에서 시작 노드와 목표 노드 간의 최단 경로 보장.큐 사용 : 탐색 과정에서 방문할 노드들을 큐에 저장하여 FIFO(First In, First Out) 방식으로 처리.방문 처리 필요 : 이미 방문한 노드를 다시 탐색하지 않도록(무한 루프 방지) 방문 여부를 체크하는 배열 또는 집합 사용. 📍BFS의 동작 흐름1..

[Java] 자바 스트림(Stream)

📍 스트림(Stream)이란?: Java 8 부터 추가된 기술로 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술이다. 🪄 스트림의 특징원본 데이터 소스를 변경하지는 않는다 - 읽기만 함일회용이다. - 한 번 사용 시 닫혀서 재사용이 불가능최종 연산 전까지 중간 연산을 수행하지 않는다.작업을 내부 반복으로 처리한다.병렬 처리가 쉽다. - 멀티쓰레드 사용기본형 스트림을 제공한다. 🪄 스트림 종류Arrays.stream() : 배열 스트림.stream() : 컬렉션 스트림 (. 앞에 컬렉션이 들어감)Stream.builder()IntStream : 기본 타입형 스트림parallelStream() : 병렬 스트림 🪄 스트림 중간 연산Filtering : 스트림 내 요소들을 하나씩 ..

[Java] 정적(Static) 멤버의 사용

💡정적(static): 자바에서 정적(static) 키워드는 클래스 레벨의 변수나 메서드에 사용되고, 이를 통해 객체 생성 없이 해당 변수나 메서드에 접근할 수 있다. Staric 멤버는 클래스가 메모리에 로드될 때 단 한 번만 생성되며, 모든 인스턴스가 공유하는 공통의 자원이 된다.static 키워드는 주로 상수 선언, 유틸리티 함수 구현, 싱글톤 패턴 구현 등에 사용된다.static 멤버는 클래스 단위로 관리되어 메모리 사용량을 줄이고, 객체 생성 오버헤드 없이 접근할 수있어서 메모리 관리와 성능 최적화에 기여한다.static 키워드를 통해 생성된 정적멤버들은 Heap 영역이 아닌 Static 영역에 할당된다. static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할..

[Java] 일급 컬렉션

📍일급 컬렉션 📍Collection 하위 인터페이스 1️⃣List 인터페이스: 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하는 데 사용된다.ArrayList: 단방향 포인터 구조LinkedList: 양방향 포인터 구조 (이중 연결리스트)StackVector 2️⃣set 인터페이스: 중복을 허용하지 않고 저장 순서가 유지되지 않는 컬렉션을 구현하는 데 사용된다.HashSet가장 빠른 임의 접근 속도를 가짐.순서를 예측할 수 없음.TreeSet정렬 방법을 지정할 수 있음.  3️⃣Map 인터페이스: 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션을 구현하는 데 사용된다. 키는 중복될 수 없지만, 값은 중복 가능하며 순서가 없다.HashTableHashMap보다 느리지만 동기..

[JAVA] StringBuilder

백준 문제 풀면서구글링하다가BufferedWriter가 아닌StringBuilder를 쓰는 것을 보고대체 뭔지 궁금해서찾아봄​StringBuilder는 이름 그대로여러가지 문자열을합해줄 때 유용하게 쓰임.​StringBuilder.append()의 형태로 쓰이는데추가할 문자열을 계속 append로써주면 됨.​append 말고도다른 메서드들을 활용해서인덱싱으로 문자열을추가 혹은 삭제, 대체, reverse 등도 가능함.​위 코드에서문자열을 출력할 때System.out.println(sb.toString());으로 출력해줬는데사실System.out.println(sb);로 입력해도동일하게 출력됨.​그래서 toString() 메서드의 사용 이유를 찾아봤는데불변의 string형태로 저장시키기 위함​원래 stri..

[JAVA] BufferedReader와 Bufferedwriter

백준 15552번 문제를 풀던 중BufferedReader와 Bufferedwriter를이용해 문제를 풀라고 하길래급하게 배워보는 중BufferedReader: Scanner 대신 사용 가능​※주의할 점은 데이터를 받을 때enter로만 구분 가능하고,데이터를 string형식으로 받음.​Bufferedwriter: System.out.println(); 대신 사용 가능​이 두개를 사용하면입출력 시 빠른 속도로사용할 수 있음.​이유는입력된 데이터가 바로 전달되지 않고버퍼를 거쳐 전달되기 때문에데이터 처리 효울성이 높아서 라고 함.사용 전import java.io.*;임포트 필수​또는 아래와 같이필요한 것만 불러오기도 가능또한BufferedReader를 쓰기 위해서는예외처리가 필수​예외처리​try&catch를..

[JAVA] 멘토씨리즈 자바 Chapter7

*오늘의 학습 목표*상속과 다형성에 대해각각 90%이상 이해하고 활용해보기 (1)상속이란?새로운 클래스를 작성할 때 기존에 존재하는 클래스를물려받아 이용하는 것.​멤버를 물려주는 클래스 = 부모 클래스 or 조상 클래스상속받는 클래스 = 자식 클래스 or 자손 클래스​상속할 때는 새롭게 작성할 클래스 선언 뒤에extends 부모 클래스 이름을 붙임.​class Parents{}class Child extends Parents{}//Parents 클래스의 멤버들을 상속받음​상속을 사용하는 이유는코드의 재사용성과 중복성을 줄이기 위함​※상속 시 생성자는 상속되지 않음.​Test05_01.javaTest05_01.java(2)Test05_01.java(3)tip)class의 이름은 기본적으로 첫글자 대문자자바..

[JAVA] 멘토씨리즈 자바 Chapter6

*오늘의 학습 목표*객체지향프로그래밍, 클래스, 메서드 개념을 90% 이상 이해하기​(1)객체지향 언어란?​객체지향 언어로는 자바, 파이썬이 대표적이라고 알고있음(일단 무지한 나의 배경지식)​이제 책의 언어를 빌려보자면​"현실에 존재하는 사물과 개념들을 소프트웨어적으로 구현하고,그 구현된 객체들이 상호작용하여 데이터를 처리하는 방식"​객체지향 언어의 특징으로는코드의 재사용성 : 새로운 코드를 작성할 때 기존의 코드를 이용함으로써코드의 수를 크게 줄일 수 있고 유지 보수에도 편리함.신뢰성 높은 프로그래밍 : 제어자와 메서드를 사용해서 데이터를 보호함.코드 관리의 편리함 : 객체지향 프로그래밍은 한 부분만 변경하면 관련된 모든 부분이 변경되므로 관리가 편리함.​(2)클래스와 객체​클래스란?​"객체를 만들기 ..

[Java] 멘토씨리즈 자바 Chapter02-Chapter05

*오늘의 학습 목표*오늘 학습 내용은 한달 공백을 깨기 위한 준비 단계 정도12월에 공부했던 코드 살펴보면서 내용 복습하기​chapter02. 변수와 상수​​(1)데이터 타입데이터 타입의 종류는정수형 데이터 타입(byte, short, int, long)실수형 데이터 타입(float, double)문자형 데이터 타입(char)논리형 데이터 타입(boolean)Test01_02.java(2)형변환형변환은 자동 형변환과 명시적 형변환으로사용 가능한데 보통 자동적으로프로그램이 변환시켜주는 자동 형변환을 더 많이 사용하는 듯.명시적 형변환 방법 → (변환하고자하는 타입)변수명;​(3)상수 선언상수 선언 방법 → final 데이터 타입 상수명=값;프로그램 실행 중 변경 할 수 없는 고정값으로자주 사용될 것 같음...