자바(Java) 예제: 인접한 사방향(상하좌우, 동서남북) 탐색 (방향 벡터 1)

자바에서, 예를 들어 지도인 map이 있고, 여기에서 "옷"이 사람인 경우 그 사람 주변(상하좌우, 동서남북)에 무엇이 있는지 탐색하는 예제입니다. dx, dy 배열을 설정하고 (예제에서는 dir라는 이름의 2차원 int 배열로 했습니다.) 맵을 2중 for문을 돌면서 사람("옷")을 만나면 그 안에서 또 4번 반복하는 for문을 실행해 주변에 무엇이 있는지 확인합니다. dx(dir[0]), dy(dir[1])의 값에 따라 탐색 더보기…

자바(Java) 예제: 재귀 호출(Recursive Call, 재귀 함수, 재귀 알고리즘)

재귀호출 설명 재귀(Recursion) 알고리즘이란 어떠한 문제를 자기 자신을 호출하여 해결하는 과정을 말합니다. 링크 예제 1: 코드 실행 추적 다음은 정보처리산업기사에서 출제된 문제입니다. 다음 코드의 실행 결과는? public class RecursiveExample { public static int recursive(int n) { int i; if (n < 1) return 2; else { i = (2 * 더보기…

자바(Java) 예제: 최대 힙 (Max Heap)

자료구조 학습용 예제입니다. 힙과 배열 힙(Heap): 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리: 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 일반적으로 힙 구현시 배열 자료구조를 활용함 배열은 인덱스가 0번부터 시작하지만, 힙 구현의 편의를 위해, root 노드 인덱스 번호를 1로 지정하면, 더보기…

자바(Java): 양쪽 연결 리스트(Doubly Linked List; 더블 링크드 리스트) [자바 공식 제공 & 알고리즘 학습용 예제]

연결 리스트 (자바 공식 제공) ArrayList()와 사용법은 거의 같습니다. 다만 내부 동작 방식이 다릅니다. package blog.dblinkedlist; import java.util.LinkedList; import java.util.List; public class LinkedListTest { public static void main(String[] args) { List<Object> list = new LinkedList<>(); for(int i = 1; i <= 12; i++) { list.add(i); } // 인덱스 바로 뒤에 더보기…

자바: 텍스트 파일 입출력 (예제 – 간단한 로그 기록)

텍스트 파일 읽기 (BufferedReader 사용) 텍스트 파일을 읽는 순서는 다음과 같습니다. File 인스턴스를 생성 File 인스턴스를 파라미터로 하는 FileReader 인스턴스 생성 FileReader 인스턴스를 파라미터로 하는 BufferedReader 생성 BufferedReader에서 읽은 텍스트를 임시로 저장하는 String 타입의 변수 생성 while문과 버퍼리더의 readLine() 을 이용해 텍스트 파일을 한 줄씩 읽음 BufferedReader를 close() 시킴   더보기…

자바 예제: 특정 주파수의 소리 재생

특정 주파수의 음을 사인파(Sine Wave)로 재생하고 싶다면, javax.sound.sampled.* 라이브러리를 사용합니다. javax 시리즈는 자바에서 기본 제공됩니다.   1) new AudioFormat으로 새로운 오디오 형식 생성 public AudioFormat(float sampleRate:샘플수, int sampleSizeInBits:비트당샘플사이즈, int channels:채널수, boolean signed:부호여부, boolean bigEndian:빅엔디안여부)   2) 생성한 AudioFormat에서 소스 데이터 라인(Source Data Line)을 추출 후 SourceDataLine 자료형 변수에 저장 AudioFormat 더보기…

자바: Enum (예제 – 모스 부호)

Enum 클래스는 고유 타입으로 상수를 이용할 수 있게 하는 특수한 클래스입니다. (자세한 내용) 다음은 가장 기초적 형태의 Enum 선언입니다. public enum FourDevas { 백호, 주작, 청룡, 현무; } 이렇게 하면 백호, 주작, 청룡, 현무의 4개의 상수가 지정되며 FourDevas 자료형을 통해 해당 상수들을 사용할 수 있습니다.   아래 코드에서 변수fd에는 FourDevas 더보기…

Java 예제: URL로부터 파일 다운로드(ReadableByteChannel 이용)

웹브라우저를 통하지 않고 자바 자체에서 파일 다운로드를 하는 예제입니다. Channels는 유틸리티 메소드로 Channel과 Stream에 필요한 작업들을 제공합니다. new Channel(InputStream in)은 인풋스트림(InputStream)을 새로운 ReadableByteChannel(채널)로 만들어주는데, Channel이란 하드웨어 장치, 파일, 네트워크 소켓 또는 하나 이상의 고유 한 I/O 작업을 수행 할 수 있는 프로그램 구성 요소와 같은 엔터티에 대한 열린 연결을 나타내는 것이라고 합니다. 더보기…

Java: 주소에 의한 참조(Call-by-reference)

주소에 의한 참조는 무슨 말일까요? 메모리에 어떤 값을 저장했다면 그 값이 담긴 방(room)과 그 방을 가리키는 주소가 있습니다. Call-by-reference는 주소를 참조(reference)해서 값들을 조작합니다. 메소드 간 통신(값이나 주소를 주고받는 행위)을 한다고 할 때 주소만 넘겨서 서로 주소를 공유하고 값들을 공유해서 조작하는 방법을 뜻합니다. C 언어에서 다루는 포인터(Pointer)에서 연장된 개념이라고 볼 수 더보기…

Java: LocalDate, LocalTime, ChronoUnit을 이용해 시간 나타내고 구하기 (Java 8) + 예제(바이오리듬)

JDK 8에서 등장한 새로운 LocalDate, LocalTime, ChronoUnit을 이용해 시간을 나타내고 계산을 해보겠습니다. 이전에는 Date, Calendar 이런 애들이 쓰였는데요, 자바 초기에 등장한 것이라 문제가 많았다고 합니다. 여러 문제를 다 열거할 수 없지만 가장 큰 문제는 Calendar는 특이하게 월을 0 ~ 11로 기록해야 한다는 점이었습니다. 혹시 이런 점을 모르고 일반적인 상식으로 코드를 작성했다가 더보기…