목록알고리즘 (23)
동그란 도그린
입력 첫째 줄에 N과 K (2 ≤ N ≤ 50, 0 ≤ K ≤ N(N-1)/2) 출력 (조건) 문자열 S의 길이가 N이고 'A', 'B'로 이루어져 있을 때, 문자열 S에는 0 ≤ i = ..
StringBuilder와 StringBuffer를 사용하는 이유 String의 원본 값은 변경할 수 없음. 불변(immutable) 자료형 아래 코드에서 객체를 수정한 것처럼 보이지만, 사실 또다른 새로운 String 객체를 생성한 것임. String 타입의 문자열을 수정할 때마다 메모리 내의 힙 영역에 값이 변경된 새로운 인스턴스가 생성되므로 메모리 낭비가 될 수 있고, 속도도 느려짐. String str = "hello"; str += "world"; 따라서 문자열 변경 작업이 거의 없을 때는 String을 사용하고, 문자열을 빈번하게 추가, 수정, 삭제하는 경우에는 StringBuilder와 StringBuffer를 사용하는 게 좋음. StringBuilder와 StringBuffer는 내부 Bu..
✔ LIS (최장 증가 부분 수열) Longest Increasing Subsequence의 약자 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분 수열을 찾는 알고리즘 예를 들어, { 4, 6, 4, 8, 3, 5 }라는 수열이 있을 때 만들 수 있는 증가하는 부분 수열은 { 4, 6 ,8 }, { 3, 5 }, { 4, 5 } 등 다양하지만, LIS는 가장 긴 증가 부분 수열인 { 4, 6, 8 }을 찾는 것이다.
⏲ 빅오 표기법 가장 빠르게 증가하는 항만 고려하는 표기법 함수의 상한을 나타냄 차수가 가장 큰 항에서 계수를 제외하여 표현 예시) 4*N^3 + 2*N^2 + 100인 알고리즘이 있다면, O(N^3)으로 표현 시간 복잡도 좋음 O(1) 상수 시간 O(logN) 로그 시간 O(N) 선형 시간 O(NlogN) 로그 선형 시간 O(N^2) 이차 시간 O(N^3) 삼차 시간 O(2^n) 지수 시간 시간 복잡도 나쁨
입력 첫 줄에 버퍼의 크기를 나타내는 자연수 N 입력 둘째 줄부터 한 줄에 하나씩 라우터가 처리해야 할 정보 입력 양수: 해당하는 번호의 패킷이 입력으로 들어왔다는 것을 의미 0 : 라우터가 패킷 하나를 처리했다는 것을 의미 (버퍼가 비어있을때는 0이 입력으로 들어오지 않음) -1 : 입력의 끝을 의미 출력 라우터에 남아있는 패킷을 순서대로 출력 비어있는 경우 “empty”를 출력 풀이 방법 큐 이용하여 구현 입력 받은 수가 양수이고, 버퍼가 가득 차지 않은 경우 ⇒ 큐에 입력 받은 패킷 번호 저장 0을 입력 받은 경우 ⇒ 큐에 저장된 맨 앞의 패킷 꺼내기 if문을 통해 큐(버퍼)가 비어있는 경우와 비어있지 않은 경우로 나누어 출력 코드 import java.io.*; import java.util.*;..
📍 Deque이란? Double-Ended Queue의 줄임말로, 그림과 같이 큐의 양쪽에서 데이터의 삽입 및 삭제가 가능한 형태의 자료구조 Deque deque1 = new ArrayDeque(); Deque deque2 = new LinkedBlockingDeque(); Deque deque3 = new ConcurrentLinkedDeque(); Deque deque4 = new LinkedList(); 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(scroll), 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(shelf)라고 함
StringBuilder 클래스의 setLength() 메소드에 0을 전달하여 빈 값으로 초기화 가능 StringBuilder sb = new StringBuilder(); sb.setLength(0);// 빈 값으로 초기화
🔅 Comparable과 Comparator 사용 이유 public class Test { public static void main(String[] args) { Student a = new Student(20, 23);// 20세, 23학번 Student b = new Student(22, 21);// 22세, 21학번 // 두 객체 비교하기 } } class Student { int age; // 나이 int id; // 학번 Student(int age, int id) { this.age = age; this.id = id; } } 위와 같은 상황에서 두 객체를 어떤 기준으로 비교할지 판단할 수 없으므로 이러한 문제를 해결하기 위해 Comparable과 Comparator를 사용함 🔅 Compar..