전체 글 90

[컬렉션 프레임워크] Set

자바 컬렉션 프레임워크자바의 컬렉션 프레임워크(Collection Framework)는 데이터를 효율적으로 저장,조회,관리하기 위한 자료구조 라이브러리 집합분류(핵심 인터페이스)중복 허용순서 보장주요 구현체ListOO(인덱스 기반)ArrayList, LinkedListSetX-(구현체에 따라 다름)HashSet, TreeSetQueueOO(입출력 순서)LinkedList, ArrayDequeMapX(Key 기준)-(Key 순서 없음, 일부 정렬)HashMap, TreeMap Set * Set이란?자바 컬렉션 프레임워크에서 중복을 허용하지 않고, 순서를 보장하지 않는 집합형 자료구조(컬렉션)요소 간 순서보다 유일성(unique)이 중요* Set의 주요 특징특징설명중복 불가동일한 객체는 한 번만 저장된 (e..

[컬렉션 프레임워크] HashSet

HashSet * HashSet이란?자바에서 제공하는 Set 인터페이스의 구현체 중 하나로 중복 없는 데이터 저장, 빠른 탐색이 필요한 상황에서 사용내부적으로 배열 + 해시 기반 구조를 가지며, 순서를 보장하지 않고 null 값은 하나만 저장 가능 * HashSet 특징중복 불가 : equals()와 hashCode()로 동일한 객체 판별순서 보장 X : 저장 순서와 출력 순서가 다를 수 있음null 허용 : null 값 1개만 저장 가능빠른 검색/삽입/삭제 : 평균 시간복잡도 O(1)* HashSet 내부 작동 원리객체를 저장할 때 hashCode() 메서드를 호출해 해시값 생성정수가 아닌 값들을 정수로 바꿔서 배열의 인덱스로 활용할 수 있게 변환해시값을 기준으로 배열 인덱스를 구함(hash % cap..

[컬렉션 프레임워크] Hash

List vs Set * List순서 보장(인덱스 기반 접근 가능)중복 요소 허용요소를 순차적으로 저장하며, 원하는 위치에 삽입/삭제 가능인덱스를 기준으로 get(index)로 접근할 수 있음대표 구현체ArrayList : 배열 기반, 조회 빠름LinkedList : 노드 기반, 삽입/삭제 빠름* Set순서를 보장하지 않거나, 구현체에 따라 부분적으로 보장할 수 있음중복된 요소를 허용하지 않음 -> 유일한 값 저장 시 사용get(index) 같은 인덱스 기반 접근 불가능내부적으로 해시 구조, 정렬 트리, 링크드 해시 등을 사용해 동작대표 구현체HashSet : 순서x, 해시 기반LinkedHashSet : 삽입 순서 유지TreeSet : 정렬된 상태 유지 * List vs Set항목ListSet순서 유지..

[컬렉션 프레임워크] List

List * List란?List는 자바 컬렉션 프레임워크에서 가장 많이 사용되는 자료구조 중 하나로, 데이터를 순차적으로 저장하며 중복을 허용하고 순서를 유지한다는 특징을 가짐순서 보장 : 데이터를 삽입한 순서대로 저장하며, 인덱스를 통해 요소에 접근 가능중복 허용 : 동일한 값을 여러 번 저장할 수 있음ArrayList, LinkedList 등이 있음List 추상화 컬렉션을 다룰때, 구체적인 구현체(ArrayList, LinkedList 등)에 의존하면 유연성과 확장성이 떨어져 추상화(인터페이스)를 통해 코드를 더 유연하게 만들 수 있다. * 자바 컬렉션 주요 인터페이스인터페이스특징대표 구현체List순서 유지, 인덱스로 접근 가능, 중복 허용ArrayList, LinkedList, VectorSet순서..

[컬렉션 프레임워크] LinkedList

ArrayList의 한계 ArrayList는 내부적으로 배열(Array)을 기반으로 작동하며, 이 구조는 조회에는 빠르지만 삽입/삭제가 빈번한 경우에 비효율적이다. * ArrayList의 한계크기 고정 문제 : 배열 기반이므로 요소가 많아지면 배열을 새로 생성하고 복사해야 함 -> 성능 저하중간 삽입/삭제 비효율 : 배열의 요소를 하나씩 이동해야 하므로 시간 복잡도 O(n)삽입/삭제 성능 저하 : 대량의 데이터를 다루거나 빈번하게 요소를 조작할 때 비효율적 => 이러한 문제를 해결하기 위해 LinkedList 사용LinkedList 1. LinkedList란?자바에서 제공하는 List 인터페이스의 구현체 중 하나로, 노드(Node)를 기반으로 데이터를 연결해서 관리하는 연결 리스트 구조이다.ArrayLi..

[컬렉션 프레임워크] ArrayList

컬렉션 프레임워크& 시간 복잡도(Big-O) 1. 컬렉션 프레임워크란?자바에서는 데이터를 효율적으로 관리하기 위해 컬렉션(Collection) 프레임워크라는 도구를 제공한다.이는 데이터를 저장하고 처리하는 자료구조와 알고리즘을 표준화해 놓은 자바의 라이브러리 집합이다. * 주요 컬렉션 프레임워크List : 순서 O, 중복 OArrayList, LinkedListSet : 순서 X, 중복 XHashSet, TreeSetMap : Key-ValueHashMap, TreeMap각 자료구조는 특정 상황에서 성능, 메모리, 기능의 차이를 가지기 때문에 선택의 기준이 중요한데, 이때 고려하는 것이 시간 복잡도(Big-O)이다. 2. 시간 복잡도(Big-O)* 시간 복잡도 : 프로그래밍에서 알고리즘의 성능을 판단하는..

[제네릭] 제네릭 문법 정리 : 타입 제한, 메서드, 와일드카드

타입 제한(Type Bound)T extends * 타입 제한이 필요한 이유?제네릭은 타입을 일반화해 다양한 상황에 유연하게 대응할 수 있도록 도와주는 문법이지만 모든 타입을 무제한으로 허용하면, 오히려 필요한 기능을 사용하지 못해 타입 안정성을 해칠 수 있음 1. 기존 문제 -> 타입마다 클래스 생성타입마다 클래스를 새로 생성 -> 구조는 같고 타입만 다름결론 : 코드 재사용 X, 타입 안전성 Opublic class CatHospital { private Cat animal; public void set(Cat animal) { this.animal = animal; } public void checkup() { System.out.println("동물 ..

[제네릭] 제네릭이 필요한 이유 : 타입 안정성과 코드 재사용

제네릭이 필요한 이유1. 자바에서 다양한 타입을 처리하는 방법 -> 각 타입별로 클래스를 따로 정의클래스 구조는 거의 동일하지만 타입이 다르면 클래스를 새로 만들어야 함IntegerBox, StringBox, DoubleBox... 타입별로 각각 클래스를 만들어야 함 -> 무한 반복결론 : 유지보수 어려움 + 많은 코드 중복public class IntegerBox { private Integer value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}public class StringBox { private String v..

[프로그래머스/ 탐욕법(Greedy)] 체육복

Q. 체육복A1.class Solution { public int solution(int n, int[] lost, int[] reserve) { // 학생번호는 1부터 n까지 이므로 0번 인덱스를 사용하지 않음 -> n+1 크기의 배열 생성 // clothes[]: 학생이 가진 체육복 수 int[] clothes = new int[n + 1]; // 모든 학생이 체육복을 하나씩 가지고 있다고 가정 for (int i = 1; i = 1 && clothes[i - 1] == 2) { clothes[i - 1] = 1; clothes[i] = 1; ..

[프로그래머스/ 2019 KAKAO BLIND RECRUITMENT] 실패율

Q. 실패율A.class Solution { public int[] solution(int N, int[] stages) { // 전체 플레이어 수 저장 int players = stages.length; // countStage[]: 1부터 N까지 각 스테이지에 도달한 플레이어 수 저장 // 인덱스 N+1: 모든 스테이지를 클리어한 플레이어 // 인덱스 1부터 N+1까지 사용하므로 배열 크기는 N+2가 되야함 int[] countStage = new int[N + 2]; // 각 플레이어가 현재 도전 중인 스테이지 번호를 이용해 스테이지 번호가 N이하인 경우만 카운팅 /..