전체 글76 Stack, Queue 1. 스택 1) 스택이란? - 물건을 쌓아 올리듯 자료를 쌓아 올린 형태의 자료구조 - 선형구조이다. (자료 간의 관계가 1:1 관계를 갖는다.) - 후입선출구조 (LIFO) 2) 주요 메서드 Stack st = new Stack(); 메서드 설명 boolean empty() Stack이 비어있는지 확인 Object peek() Stack의 맨 위에 저장된 객체를 반환 pop()과 달리 Stack에서 객체를 꺼내지 않음 비었을 때는 EmptyStackException 반환 Object pop() Stack의 맨 위에 저장된 객체를 꺼냄 비었을 때는 EmptyStackException 반환 Object push(Object item) Stack에 객체(item)을 저장 int search(Object o).. 2024. 2. 4. 부분집합, 비트연산, 바이너리 카운팅 1. 부분집합 1) 부분집합이란? - 집합에 포함된 원소들을 선택하는 것. - 다수의 중요 알고리즘들이 원소들의 그룹에서 최적의 부분 집합을 찾는 것 - 집합의 원소가 n개일 때, 공집합을 포함한 부분집합의 수는 2^n개 이다. 2. 부분집합의 합 구하기(재귀) public static void generateSubSet(int cnt) { // 기저 조건 if (cnt == N) { for (int i = 0; i < N; i++) { System.out.print((isSelected[i] ? input[i] : "X") + "\t"); } System.out.println(); return; } // 유도 파트 isSelected[cnt] = true; // 부분집합에 포함 generateSubSe.. 2024. 2. 1. 완전 탐색 1. 완전 탐색 1) 완전 탐색이란? - 문제의 해법으로 생각할 수 있는 모든 경우의 수를 나열해보고 확인하는 기법 - Bruete-force 기법이라고 불린다. - 상대적으로 빠른 시간에 문제 해결을 할 수 있다. - 일반적으로 경우의 수가 상대적으로 작을 때 유용하다. - 우선 완전 탐색으로 접근하여 해답을 도출한 후, 성능 개선을 위해 다른 알고리즘을 사용하고 해답을 확인하는 것이 바람직하다. 2. 순열, 조합 1) 순열(P) - 순열이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 있음) - nPn은 n!이다. - 10!은 약 360만 (마지노선) 2) 조합(C) - 조합이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 없음) 3) 순열, .. 2024. 1. 30. 알고리즘 / 재귀 1. SW 문제 해결 능력 1) SW 문제 해결 역랑 - 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력 ※ 한 문제를 풀고 3명 이상의 풀이법을 보기 - 문제 해결 역량은 추상적인 기술이다. - 문제 해결 역량을 향상하기 위해서 훈련이 필요하다. 2) 문제 해결 과정 - 문제를 읽고 이해한다. (3회독) - 어떻게 해결할지 계획을 세운다. - 계획을 검증한다. (시간 복잡도, 공간 복잡도) - 프로그램으로 구현한다. - 어떻게 풀었는지 돌아보고, 개선한 방법이 있는지 찾아본다. - 1시간이 지나면 풀었든 못 풀었든 다른 사람들의 코드를 찾아본다. (3명 이상) 3) 알고리즘 - 어떠한 문제를 해결하기 위한 절차라고 볼 수 있다. 2. 알고리즘 성능 1) 시간 복잡도 - 최선의 경우 : 빅 .. 2024. 1. 29. XML 파싱 1. 공공데이터 1) 공공데이터란? - 공공기관이 만들어내는 모든 공적인 정보 - 누구나 원하는 개별 키를 발급 받아 원하는 기능에 활용 가능 2) 데이터의 형태 - CSV : ","를 통해서 데이터 구분, 용량이 작지만 구조적이지 못함 - XML : 태그를 사용하여 문서 작성, 구조적, 정확한 문법이 필요, 큰 용량 - JSON : {}를 묶어 객체로 표현, 구조를 가지며 객체로 다른 언어와 호환, XML보다 비교적 저 용량 3) XML - 마크업 언어 : 태그를 사용 - HTML과 달리 태그를 확장 가능 - 정확한 문법을 지켜야 동작 - 반드시 root element가 존재해야 한다. - 태그는 대소문자를 구별한다. - valid한 문서 : xml 태그는 자유롭게 생성하기 때문에 최초 작성자의 의도대.. 2024. 1. 25. I/O, Stream 1. 노드스트림 1) I/O와 Stream - I/O : 데이터의 입력과 출력 - 데이터는 한쪽에서 주고 한쪽에서 받는 구조로 되어있음(단방향 통신, 하나의 스트림은 하나의 입출력) - 노드 : 입력과 출력의 끝단 (키보드, 콘솔, 파일 등등) - 스트림 : 두 노드를 연결하고 데이터를 전송할 수 있는 개념 2) Node Stream의 종류 (Stream은 Byte, er은 char) ※ 파일 경로를 찾을 경우 절대 경로를 추천한다. 3) 예제 코드 public class SimpleInputTest { private String data1 = "hi java world"; private String data2 = "자바는 객체지향 언어입니다."; private void read1() { try (Inp.. 2024. 1. 24. Collection, lamda ※ List, Set, Map과 같은 인터페이스는 java.util의 패키지이다. ※ List와 Set은 Collection을 상속 받는다. ※ CRUD 메서드를 사용 1. List 1) 특징 - 입력 순서가 있는 데이터 집합 - 데이터의 중복을 허락 - ex) ArrayList, LinkedList List 이름 = new ArrayList() or new LinkedList(); 2) 주요 메서드 2. 배열과 ArrayList ※ 배열을 사용하는 ArrayList도 태생적으로 배열의 장-단점을 그래도 가져감 1) 배열의 장점 - 간단하며 사용이 쉬움 - 접근 속도가 빠름 2) 배열의 단점 - 크기 변경이 불가능하여 추가 데이터를 위해 새로운 배열을 만들고 복사해야함 - 비 순차적 데이터의 추가, 삭제.. 2024. 1. 23. DFS / BFS 1. DFS - 깊이 우선 탐색은 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘입니다. - 재귀 함수를 이용하므로 스택 오버플로에 유의 - ex. 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상 정렬 - 작동 원리 - 예제 코드 public class BJ_11724 { static ArrayList[] A; static boolean visited[]; static void DFS(int v) { if (visited[v]) { return; } visited[v] = true; for (int i : A[v]) { if (!visited[i]) { DFS(i); } } } public static vo.. 2024. 1. 22. 예외 처리(exception handling) 1. 에러와 예외 1) 에러(Error) : 프로그램을 잘 못 작성한 경우 - 메모리 부족, Stack Overflow등 - 디버깅으로 코드 개선 2) 예외(Exception) : 프로그램을 잘못 작성한 경우, 프로그램의 작성 의도와 달리 사용되는 경우 - null인 객체의 사용, 1/0, 읽으려는 파일이 없음 - 디버깅으로 코드 개선, 예외 처리 코드로 상황 수습 2. 예외 처리(exception handling) ※ 예외 발생 시 프로그램의 비 정상 종료를 막고 정상적인 실행 상태를 유지하는 것 (예외 감지, 발생 시 동작 코드 작성) 1) 예외 종류 - checked exception : 예외에 대한 대처 코드가 없으면 컴파일 진행 X, Exception은 checked - unchecked exc.. 2024. 1. 22. 이전 1 ··· 4 5 6 7 8 9 다음