[Java] 연산자 종류 / 참조 연산자 / instanceof / 논리 연산자 / 오류 주의
·
Java
연산자 종류(우선순위 순서대로).++, - -, !,강제 형 변환: (type) → 이때 boolean은 못 바꿈산술: * / % - +부호: - +비교: ==, !=, >, , 논리: &&, ||, 항1 ? 항2 : 항3대입: =, +=, -=, *=, … 점 연산자(참조 연산자): 멤버 접근 연산자라고도 하는데, 객체 지향의 핵심인 객체 안에 있는 변수나 메서드에 접근할 때 사용- 용도객체의 멤버 접근: 객체가 가진 필드(변수)나 메서드를 호출할 때 - 예: myCar.speed, myCar.drive()패키지 구분: 클래스가 속한 패키지 경로를 나타낼 때 - 예: java.util.Scanner클래스 멤버 접근 (Static): 인스턴스를 만들지 않고 클래스 자체의 변수나 메서드를 쓸 때 - 예:..
[Java] 원시 타입과 참조 타입의 차이 / 데이터 타입 / 리터럴
·
Java
원시 타입과 참조 타입의 차이 1. 원시 타입(Primitive Type, 원시 타입 또는 기본형 타입)특징실제 데이터 값을 직접 저장 메모리 공간(Stack 메모리)에 10이나 ‘A’ 같은 실제 값을 저장메모리 크기 고정비어있는 상태(null)를 가질 수 없음 null 값 X → 값을 지정하지 않으면 0 이나 false 같은 기본값이 자동 저장종류숫자형:정수형: byte(1), short(2), int(4), long(8)long보다 큰 범위면 실수로 쓰거나 객체 생성→ 연산할 때 기본형인 int로 자동 변환되기에 byte, short는 잘 안 씀실수형: float(4), double(8) float v = 3.14; 는 오류 남! → 더 큰 double값을 작은 float형에 넣으려고 해서→ 기본형은..
[Do it! 알고리즘 코딩 테스트 자바] 그리디 알고리즘, 소수 구하기, 유클리드 호제법, 그래프 [13~18일차]
·
Java
그리디 알고리즘- 정의: 현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정함- 핵심 이론: 해 선택 -> 적절성 검사(제약 조건과 맞는지 확인) -> 해 검사 -> 최선의 선택지가 아닌 경우, 다시 해 선택! 소수 구하기1. 에라토스테네츠의 체- 핵심 이론: 구하고자 하는 소수의 범위만큼 1차원 배열 생성 -> 2부터 시작하며 현재 선택한 숫자가 지워지지 않는 숫자라면 해당 숫자의 배수에 해당하는 수를 배열에서 끝까지 탐색하며 제거함(처음으로 선택한 숫자는 지우지 않음)-> 2를 반복한 후 배열에 남은 수 모두 출력함 2. 오일러 피- 핵심 이론: 구하고자 하는 오일러 피의 범위만큼 배열을 초기화함 -> 2부터 시작해서 현재 배열의 값과 인덱스가 같으면 현재 선택된 숫..
[Do it! 알고리즘 코딩 테스트 자바] 이진 탐색 (12일차)
·
Java
이진 탐색 (Binary Search)정의: 정렬된 데이터 배열에서 탐색 범위를 절반씩 분할하며 원하는 타겟 값의 위치를 찾는 고속 탐색 알고리즘.핵심 원리:정렬 전제 조건: 탐색 수행 전 배열의 데이터가 반드시 오름차순이나 내림차순으로 정렬되어 있어야 함.포인터 활용 (분할 정복): 탐색 범위의 시작점(start), 끝점(end), 중간점(mid) 3개의 변수(포인터)를 설정하여 범위를 조작.범위 축소 방식: 타겟 값이 중간점(mid) 값보다 작으면 왼쪽 절반을 탐색(end = mid - 1), 크면 오른쪽 절반을 탐색(start = mid + 1)하는 과정을 반복.시간 복잡도 최적화: 매 비교마다 탐색 공간이 반으로 줄어들므로 시간 복잡도는 O(log N)을 보장. 데이터 규모가 커질수록 선형 탐색(..
[Do it! 알고리즘 코딩 테스트 자바] BFS 너비 우선 탐색 - 백준 1260(11일차)
·
Java
BFS (너비 우선 탐색)정의: 시작 정점에서 가장 가까운 정점부터 먼저 방문하고, 멀리 떨어져 있는 정점을 나중에 방문하는 그래프 탐색 알고리즘.핵심 원리:선입선출(FIFO) 방식의 큐(Queue) 자료구조 활용.현재 노드와 인접한 모든 미방문 노드를 큐에 삽입하며 레벨 단위로 탐색 진행.중복 탐색을 막기 위해 노드를 큐에 삽입하기 직전(혹은 직후) 방문(visited) 여부 체크 필수.DFS와 BFS의 차이점탐색 방식: DFS는 한 우물을 끝까지 파고드는 방식(깊이 우선), BFS는 얕고 넓게 모든 방향을 고르게 탐색하는 방식(너비 우선).자료구조: DFS는 스택(Stack) 또는 재귀 호출 사용, BFS는 큐(Queue) 사용.주요 용도: DFS는 모든 경로 탐색, 백트래킹, 사이클 판별에 유리함...
[Do it! 알고리즘 코딩 테스트 자바] 백트래킹을 써야하는 이유(feat.DFS) - 백준 11724/2023/13023/15649/9663(10일차)
·
Java
DFS와 백트래킹 개념 및 차이DFS 개념: 그래프나 트리 구조에서 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 완전 탐색 방식.백트래킹 개념: 탐색 과정 중 현재 경로가 조건에 맞지 않으면 더 이상 깊이 들어가지 않고 이전 상태로 돌아가 다른 경로를 찾는 알고리즘 기법.둘의 차이점: DFS는 조건과 무관하게 모든 노드를 맹목적으로 방문함. 백트래킹은 DFS를 기반으로 하되 유망하지 않은 노드는 사전에 배제(가지치기)함.백트래킹을 많이 쓰는 이유: 불필요한 탐색 경로를 조기에 차단하여 경우의 수가 폭발적으로 증가하는 문제의 실행 시간을 기하급수적으로 줄일 수 있기 때문임. [11724번: 연결 요소의 개수]고려 내용: 양방향 간선의 그래프 표현 및 방문 여부 체크 방식.문제 핵심: 방문 배열을 활용..
[Do it! 알고리즘 코딩 테스트 자바] 병합정렬과 기수정렬 - 백준 2751 / 1517 / 10989(9일차)
·
Java
1. 병합 정렬 (Merge Sort)개념: 배열을 더 이상 나눌 수 없을 때까지 반으로 쪼갠 뒤(Divide), 두 개의 정렬된 부분 배열을 비교하며 하나의 정렬된 배열로 합치는(Merge) 방식을 재귀적으로 반복하는 알고리즘.핵심 원리 (분기 조건): 투 포인터(i, j)를 사용하여 두 부분 배열의 값을 비교.if (arr[i] else: 오른쪽 값이 작으면 임시 배열에 넣고 j++.한쪽 배열이 먼저 소진되면, 남은 배열의 원소들을 그대로 뒤에 이어 붙임.시간 복잡도: 최선, 평균, 최악 모두 O(N \log N) (항상 반으로 나누고 N번 비교하므로 보장됨).자주 쓰는 상황: 데이터의 상태와 무관하게 항상 일정한 정렬 속도가 필요할 때, 혹은 상대적인 순서가 유지되어야 하는 안정 정렬(Stable ..
[Do it! 알고리즘 코딩 테스트 자바] 삽입 정렬과 퀵 정렬 - 백준 11399 / 11004(8일차)
·
Java
1. 삽입 정렬 (Insertion Sort)개념: 미정렬 부분의 첫 원소를 정렬된 부분의 알맞은 위치에 끼워 넣으며 정렬을 확장하는 방식.핵심 원리 (분기 조건): 대상 데이터가 앞의 정렬된 데이터보다 작을 때(Target )만 위치 이동 이벤트 발생. 대상 데이터가 앞의 데이터보다 크거나 같다면 이벤트(반복문)에 진입하지 않고 그 자리에 머무름. 앞의 데이터들을 거꾸로 탐색하며 나보다 작은 값을 만나는 순간 즉시 탐색을 종료함.시간 복잡도: 최선 O(N) (이벤트 미발생 시), 최악 및 평균 O(N^2)자주 쓰는 상황: 데이터 크기가 작거나, 이미 거의 정렬되어 이동 이벤트가 적게 발생할 때. 2. 퀵 정렬 (Quick Sort)개념: 기준점(Pivot)을 잡아 작은 값은 왼쪽, 큰 값은 오른쪽으로 ..