목록Problem Solving (88)
새발블로그
Linked ListLinked List(연결 리스트)는 데이터를 노드(Node)라는 개별 단위로 저장하며, 각 노드는 다음 노드의 주소를 가리키는 포인터를 포함하고 있는 자료구조배열과 달리 메모리 공간이 물리적으로 연속될 필요는 없지만, 노드 간의 연결을 통해 논리적인 연속성을 유지한다. 이 특성 덕분에 삽입과 삭제에 강한 성능을 가지며, 메모리를 보다 유연하게 사용할 수 있다.Node 구조Linked List는 기본적으로 여러 개의 Node로 구성각 Node는 두 가지 요소를 포함value: 실제 저장하는 값next: 다음 노드를 가리키는 포인터public class Node { int value; Node next; public Node(int value) { this...
코딩 테스트에서의 정렬...직접 구현보다 내장 함수 사용Arrays.sort() 또는 Collections.sort()로 대부분의 정렬 문제 해결 가능시간복잡도Java의 내장 정렬은 Dual-Pivot QuickSort 또는 Timsort 기반평균 및 최악 시간복잡도: O(n log n)1. Arrays.sort()배열을 정렬할 때 사용되는 메서드기본형 배열 (int[], char[], 등) → Dual-Pivot QuickSort 사용객체 배열 (Integer[], String[], 등) → Timsort 사용기본 정렬은 오름차순Comparator를 이용해 정렬 기준을 변경 가능int[] numbers = {3, 1, 4, 1, 5};Arrays.sort(numbers); // 오름차순System.o..
리스트란?순서가 있는 데이터 집합중복 허용인덱스로 접근 가능수정 및 삭제 가능 (mutable)정적 배열 (Static Array)고정된 크기를 갖는 배열. 선언 시 메모리를 미리 할당받으며, 크기 변경이 불가능특징고정 크기예: int arr[5] = {1, 2, 3, 4, 5};연속된 메모리에 저장됨 → 빠른 접근(O(1)) 가능데이터 삽입/삭제에 비효율적예시 (C/C++)int arr[5] = {3, 7, 4, 2, 6}; // 5개의 int형 배열arr[3] 접근 → arr + (3 * 4byte)로 산술 연산만으로 접근 가능동적 배열 (Dynamic Array)실행 중 크기를 유연하게 변경할 수 있는 배열. 배열이 가득 차면 더 큰 배열로 복사 후 교체특징데이터 추가 시 용량 초과되면 2배로 확..
완전탐색은 가능한 모든 경우를 하나하나 확인하여 정답을 찾는 방법이다. 정답이 반드시 존재하고 경우의 수가 제한적인 경우라면 가장 확실한 해결책이 될 수 있다.완전탐색 vs 브루트포스완전탐색과 브루트포스는 모두 가능한 모든 해를 탐색한다는 공통점이 있지만, 약간의 뉘앙스 차이가 있습니다.완전탐색: 체계적이고 논리적인 구조로 모든 해를 찾는 접근브루트포스: 말 그대로 무식하게 모든 경우를 다 시도하는 방식일반적으로 두 용어는 구분 없이 혼용되며, 실전에서는 동일한 의미로 다루는 경우가 많다.1. 반복문을 활용한 완전탐색1-1. 이중 반복문을 이용한 두 수의 합두 수를 골라 합이 특정 값이 되는 쌍을 찾는 예시public class TwoSumPairs { public static void twoSum..
입력 크기별 시간복잡도 판단 기준입력 크기 100,000 이상O(n^2) → 시간 초과 가능성 매우 높음O(nlogn), O(n), O(logn) 등으로 해결해야 함방법 1: 정렬 활용 (O(nlogn))import java.util.*;public class Solution { public String solution(String[] participant, String[] completion) { Arrays.sort(participant); // O(nlogn) Arrays.sort(completion); // O(nlogn) for (int i = 0; i 방법 2: 해시맵 활용 (O(n))import java.util.*;public class Solu..
실행시간이란?실행시간이란 프로그램이 시작되어 모든 코드를 실행하고 종료되기까지 걸리는 실제 시간이다.코드는 CPU가 한 줄씩 순차적으로 처리하며, 이 과정을 통해 실행시간이 결정된다. 하지만 실행시간은 다음과 같은 여러 요소에 의해 영향을 받는다...시스템 부하: 백그라운드에서 실행 중인 다른 프로그램I/O 대기 시간: 디스크, 네트워크 등 외부 자원 접근 시간하드웨어 성능: CPU 속도, 메모리 크기 등운영체제 스케줄링: CPU를 어떤 프로세스에 언제 할당할지 결정같은 코드를 같은 컴퓨터에서 여러 번 실행해도 실행시간은 조금씩 달라질 수 있다. 하지만 입력값의 크기 변화에 따라 실행시간이 어떻게 달라지는지는 예측 가능하다.예를 들어, 반복문의 반복 횟수가 증가하면 실행시간도 그에 비례해 증가한다.pub..
1. 문자(char)하나의 문자를 저장할 때 사용char c = 'a'; 2. 문자열(String)문자열 생성큰따옴표로 생성String str = "hello";숫자 타입 → 문자열 변환String.valueOf(123);문자 배열 → 문자열 생성char[] arr = {'h', 'i'};String s = new String(arr);문자열 연결String a = "hello";String b = "world";String c = a + " " + b;문자열 불변성String은 변경 불가. 변경 시 새 객체 생성String str = "hello";str = "hi"; // 새로운 객체문자열 비교== : 참조 비교equals() : 값 비교a.equals(b); 3. 주요 String 메서드메서드 설명..
1. 함수형 인터페이스와 람다 표현식Java에서는 메소드를 직접 인자로 넘길 수 없지만, 하나의 추상 메소드만 가지는 함수형 인터페이스를 이용하면 유사한 효과를 낼 수 있다.@FunctionalInterfacepublic interface Runnable { void run();} 익명 클래스 방식func(new Runnable() { public void run() { System.out.println("Hello"); }});람다 표현식 방식 (Java 8 이상)func(() -> System.out.println("Hello"));람다 기본 형태(param) -> returnValue; str -> str.length();변수에 람다 저장ToIntFunction func..