전체 글 233

IO Stream

입출력 스트림자바는 다양한 입출력 장치에 독립적으로 일관성있는 입출력을 입출력 스트림을 통해 제공한다파일 디스크, 키보드, 마우스, 네트워크, 메모리 등 모든 자료가 입력되고 출력되는 곳입출력 스트림의 구분대상 기준: 입력 스트림 or 출력 스트림자료의 종류: 바이트 스트림 or 문자 스트림기능: 기반 스트림 or 보조 스트림입력 스트림과 출력 스트림입력 스트림: 대상으로부터 자료를 읽어 들이는 스트림이다출력 스트림: 대상으로 자료를 출력하는 스트림이다스트림의 종류종류예시입력 스트림FileInputStream, FileReader, BufferedInputStream, BufferedReader 등출력 스트림FileOutputStream, FileWriter, BufferedOutputStream, Bu..

Java 2024.09.05

선형 데이터 구조 - 배열, 리스트, 스택, 큐

선형 데이터 구조선형 데이터 구조는 구성하는 요소들이 서로 인접해 순차적인 방식으로 정렬되어 있음을 뜻한다이런 데이터 구조는 이해하기 쉽고 개발할 때 사용하기 쉽다가장 일반적인 선형 데이터 구조는 배열과 리스트가 있다배열과 리스트는 범용적인 데이터 구조다거의 모든 데이터 구조가 배열이나 리스트에서 파생됐거나 어떤 방식으로든 이들을 사용한다배열배열은 데이터를 저장하고 구성하는 데 사용하는 가장 기본적인 데이터 구조 중 하나다배열은 자료형이 같은 요소들을 저장한다배열에 저장된 각각의 자료를 요소라고 하며, 0부터 번호가 매겨진다요소에 매겨진 숫자를 배열의 인덱스라고 한다배열의 구조배열의 구조는 다음과 같다배열 특징배열 내의 요소들은 순차적 또는 연속적으로 정렬되어 있다이 특징으로 배열 요소들을 임의의 순서로..

알고리즘 2024.09.02

wait(), notify()를 활용한 동기화

wait(), notify() 메소드를 활용한 동기화 프로그래밍리소스가 특정 조건에서 더 이상 유효하지 않은 경우 리소스를 기다리기 위해 스레드는 wait 상태가 된다wait 상태 스레드는 notify()가 호출될 때까지 기다린다유효한 자원이 생기면 notify()가 호출되고 wait 상태인 스레드들 중 무작위로 하나의 스레드를 재시작한다notifyAll()을 호출하면 wait 상태인 모든 스레드가 재시작 되고 자원을 갖기 위해 경쟁한다이 경우 유효한 리소스만큼의 스레드만이 실행되고 자원을 갖지 못한 나머지 스레드는 다시 wait 상태가 된다wait(), notify() 사용 예제도서관에서 책을 빌리고 반납하는 예제 코드다import java.util.ArrayList;class FastLibrary {..

Java 2024.08.29

BOJ 1019 - 책 페이지

문제https://www.acmicpc.net/problem/1019  풀이숫자 n을 10으로 나눠가면서 1의자리에서 0~9까지의 숫자가 나오는 규칙을 찾아야 한다 숫자 n을 283으로 가정해서 예를 들었을 때현재 1의 자리는 3이므로0 ~ 2는 28 + 1(n / 10 + 1)번 나타난다4 ~ 9는 28(n / 10)번 나타난다3의 경우 28 + 1번 나타난다다음으로 283에서 10의 자리에 위치했던 수들의 개수를 세기 위해 10으로 나눈다그러면 28이고 현재 1의 자리는 8이므로0 ~ 7는 (2+1) x 10 번 나타난다 (원래 수에서 10의 자리였으므로 10을 곱해줘야한다)9는 2 x 10번 나타난다8의 경우 280, 281, 282, 283 총 4개의 숫자를 고려해줘야 한다. 이 경우는 따로 갯수..

BOJ/미해결 2024.08.28

BOJ 14500 - 테트로미노

문제https://www.acmicpc.net/problem/14500  풀이완전탐색으로 문제를 해결할 수 있다5가지 도형을 회전해서 얻을 수 있는 모든 도형을 종이 위에 올리면서 최대값을 구한다최대 시간은 500 * 500 * 19 * 4 = 19000000 이므로완전탐색으로 해결 가능하다 코드python12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152figures = [    [[0, 0], [0, 1], [1, 0], [1, 1]],    [[0, 0], [0, 1], [0, 2], [0, 3]],    [[0, 0], [1, 0], [2, 0], [3, 0]],    [[0,..

BOJ/미해결 2024.08.27

로그 남기기

logging시스템 운영에 대한 기록을 남긴다오류가 발생했을 때 그 오류에 대한 기록을 남겨 디버깅을 용이하게 한다로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용한다어느정도로 로그를 남겨야 하나너무 적은 로그: 정확한 시스템의 상황을 파악하기 어려움너무 많은 로그: 빈번한 file I/O의 오버헤드와 로그 파일의 백업 문제가 있을 수 있다java.util.logging자바에서 기본적으로 제공하는 log package다파일이나 콘솔에 로그 내용을 출력할 수 있다logging.properties 파일을 편집하여 로그 레벨을 변경할 수 있다로그 레벨은 다음과 같다severewarninginfoconfigfinefine..

Java 2024.08.26

사용자 정의 예외 클래스

사용자 정의 예외 클래스 구현자바에서 제공되는 예외 클래스 이외에도 프로그래머가 직접 만들어야 하는 예외가 필요할 때가 있다만들 때는 기존 예외 클래스 중 가장 유사한 예외 클래스에서 상속 받아 사용자 정의 예외 클래스를 만든다기본적으로 Exception 클래스를 상속해서 만들 수 있다패스워드에 대한 사용자 예외 클래스 만들기패스워드를 입력할 때 다음과 같은 경우에 오류 처리를 한다비밀번호는 null일 수 없다비밀번호의 길이는 5 이상이다비밀번호는 문자로만 이루어져서는 안된다(하나 이상의 숫자나 특수문자를 포함한다)다음은 위 조건에 맞는 예시다class PasswordException extends IllegalArgumentException { public PasswordException(Stri..

Java 2024.08.25

BOJ 1018 - 체스판 다시 칠하기

문제https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.www.acmicpc.net  풀이8*8 크기의 체스판을 두 개를 준비한다. W로 시작하는 체스판과 B로 시작하는 체스판을 준비한다.이 두 체스판을 M*N 크기의 보드에 번갈아 가면서 비교해 가면 된다. 1. M*N 보드의 왼쪽 끝(0,0)을 기준으로 8*8 크기 만큼 두 개의 체스판과 비교를 한다.2. 왼쪽 끝을 (0,1), (0,2), ..., (1,0), (1,1), ... 순으로 가능한 범위 내에서 바꿔준 후 ..

BOJ 2024.08.24

예외 처리하기와 미루기

try-catchtry 블록에는 예외가 발생할 가능성이 있는 코드를 작성하고 예외가 발생하면 catch 블록이 수행된다public class ArrayExceptionHandling { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; try { for (int i = 0; i try-catch-finallyfinally 블록에서 파일을 닫거나 네트워크를 닫는 등 리소스 해제를 구현한다try 블록이 수행되면 finally 블록은 항상 수행된다여러개의 예외 블록이 있는 경우, 각각에서 리소스를 해제하지 않고 finally 블록에서 해제하도록 구현한다catch 블록에 return이 있..

Java 2024.08.24