java 95

[BOJ] 3190. 뱀

문제 원본 : https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net import java.io.*; import java.util.ArrayDeque; import java.util.Deque; public class Main { static int[][] dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; public static void main(String[] args) throws IOException { BufferedRea..

알고리즘/BOJ 2022.03.01

[Java] Java 8의 특징(7) - 기타 변화들(어노테이션, 병렬 정렬, Metaspace)

어노테이션의 변화 자바 8부터 어노테이션을 타입 선언부에도 사용할 수 있게 되었다. 또한 어노테이션을 중복해서 사용할 수 있게 되었다. 타입에 사용할 수 있으려면 @Target에 TYPE_PARAMETER(타입 변수에만)나 TYPE_USE(모든 타입 선언부)를 지정하면 된다. 어노테이션을 중복으로 사용하기 위해서는 중복 사용할 어노테이션을 만들고, 중복 어노테이션 컨테이너를 만들면 된다. 이때 컨테이너 어노테이션은 중복 사용할 어노테이션과 @Retention 및 @Target이 같거나 더 넓어야 한다. @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) @Repeatable(AnimalContainer.class) public @inter..

Java 2022.02.28

[Java] Java 8의 특징(6) - CompletableFuture

자바 Concurrent 프로그래밍 Concurrent 하다의 의미는 동시에 여러 작업을 할 수 있는 것을 의미한다. 예를 들어 유튜브를 보면서 게임을 한다거나 노래를 들으면서 코딩을 하는 것들이 Concurrent 한 것이다. 자바에서 지원하는 Concurrent 프로그래밍에는 다음과 같은 것들이 있다. 멀티 프로세싱(ProcessBuilder) 멀티 스레드(Thread / Runnable) 멀티 스레드는 Thread를 상속해서 다음과 같이 구현할 수 있다. public class ConcurrentClass { public static void main(String[] args) { HelloThread helloThread = new HelloThread(); helloThread.start(); ..

Java 2022.02.28

[BOJ] 1074. Z

문제 원본 : https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static List list = new ArrayList(); public static void main(String[] args) throws IOExc..

알고리즘/BOJ 2022.02.28

[BOJ] 1600. 말이 되고픈 원숭이

문제 원본 : https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = n..

알고리즘/BOJ 2022.02.27

[BOJ] 2206. 벽 부수고 이동하기

문제 원본 : https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader b..

알고리즘/BOJ 2022.02.27

[Java] Java 8의 특징(5) - Date와 Time

자바 8에서 새로운 날짜와 시간 API의 등장 배경 기존에 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thread safe하지 않다. 그리고 클래스 이름이 명확하지 않다. Date 클래스인데 시간까지 다룬다. 또한 버그가 발생할 여지가 많다. 타입 안정성이 없고 월이 0부터 시작한다는 문제가 있었다. 자바 8에서 새롭게 등장한 날짜와 시간 API에는 다음과 같은 특징이 있다. 기계용 시간과 인간용 시간으로 나눌 수 있다. 기계용 시간은 Epoch 시간(1970년 1월 1일 00:00:00 협정 세계시)부터 현재까지의 타임스탬프를 표현한다. 인간용 시간은 우리가 흔히 사용하는 연, 월, 일, 시, 분, 초 등을 표현한다. 타임스탬프는 Instant를 사용한다. 특정 지역의 날짜..

Java 2022.02.26

[BOJ] 1406. 에디터

문제 원본 : https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net import java.io.*; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = ..

알고리즘/BOJ 2022.02.26

[BOJ] 5639. 이진 검색 트리

문제 원본 : https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWrit..

알고리즘/BOJ 2022.02.25

[Java] Java 8의 특징(4) - Optional

Optional(옵셔널) Optional은 자바 프로그래밍에서 굉장히 자주 보이는 NullPointerException을 방지하기 위해서 등장했다고 볼 수 있다. 자바에서 NullPointerException을 자주 보게 되는 이유가 뭘까? 그 이유는 null을 리턴할 수도 있는 객체를 참조할 때 null 체크를 깜빡했기 때문이다. 우선 다음 코드를 보자. public class PetStore { public String getBuyer(Pet pet) { Master master = pet.getMaster(); return master.getName(); } } 위 코드에서는 null이 총 세 군데에서 발생할 수 있다. 첫 번째는 pet이 null일 수도 있고, 두 번째는 master가 null일 ..

Java 2022.02.25