반응형

자바 119

자바(JAVA) - Scanner & BufferedReader

자바(JAVA) - Scanner & BufferedReader 자바를 처음 배울 때 사용자(키보드) 입력받기 위해 보통 Scanner 클래스를 사용합니다. 하지만 알고리즘을 풀기 시작하면서 백준에서 Scanner를 사용하여 입력을 받으면 시간초과가 발생하는 경험을 하게 됩니다. 그래서 다른 방법을 찾다 보면 BufferedReader를 접하게 됩니다. Scanner와 BufferedReader 클래스는 둘 다 사용자(키보드) 입력을 받을 수 있는 기능을 제공합니다. 두 클래스가 가지고 있는 함수들에도 많은 차이가 있지만 가장 큰 차이는 속도입니다. Scanner와 BufferedReader의 사용법 import java.util.Scanner; public class Input { public stat..

자바(JAVA) - Interface default & static method

jdk 1.8(java 8)부터 인터페이스에 default method와 static method가 추가되었습니다. 이전 버전에서는 인터페이스는 오직 추상 메서드만 가질 수 있었습니다. default method 인터페이스에 새로운 메서드를 추가하거나 변경하게 되면 해당 인터페이스를 구현하는 모든 클래스들이 해당 메서드를 새로 구현해야 하는 불편함이 존재하였습니다. 그래서 이를 해결하기 위해 인터페이스에 default 메서드 기능을 추가하였습니다. 인터페이스는 추상 메서드만을 갖는 원칙이 있었습니다. 여러 인터페이스들간의 충돌을 방지하기 위해 추상 메서드만을 사용하도록 하였습니다. 하지만 default 메서드는 추상 메서드가 아닌 인스턴스 메서드로 '{ }' 바디를 가질 수 있습니다(구현될 수 있다). ..

자바(JAVA) - Optional

Optional은 jdk 1.8(java 8)부터 추가된 기능입니다. Optional 클래스는 제네릭 타입의 클래스이며 타입 파라미터로 T 타입을 사용되며 T 타입의 참조 변수 value가 있습니다. public final class Optional { private final T value; ... } 제네릭 타입은 데이터 형식에 의존하지 않고, 모든 데이터 타입을 갖도록 하는 방법입니다. 클래스에서 미리 타입을 지정하지 않고 사용자에 의해 지정됩니다. 제네릭을 사용하게 되면 컴파일 타임에 강한 타입 체크가 가능하며, 외부에서 타입을 지정하여 캐스트가 불필요한 장점 등이 있습니다. 성능 향상을 위해 기본타입은 OptionalInt, OptionalDouble과 같은 래퍼 클래스들을 사용하는 것이 좋습니..

자바(JAVA) - 람다식(Lambda Expression)

람다식(Lambda Expression) 람다식은 자바에서 제공하는 함수형 프로그래밍(Functional Programming) 방식입니다. 자바의 객체지향 프로그래밍(Object Oriented Programming) 이지만, JDK 1.8 Java 8)부터 함수형 프로그래밍 기능을 추가하였습니다. 람다식은 익명 함수(Anonymous functions)를 지칭하는 용어로 함수(메서드)를 간단한 식(expression)으로 표현하는 방법입니다. 하지만 자바에서 람다식은 익명 함수가 아니라 익명 객체입니다. 자바에서는 함수만 존재할 수 없으므로 객체 형식으로 존재해야합니다. 본래는 익명 객체를 사용하는 것을 람다식을 사용하여 표현할 수 있습니다. 익명 객체란 이름이 없는 일회용 클래스로 선언과 생성을 동..

자바(JAVA) - 익명 클래스 (Anonymous class)

익명 클래스란 이름이 없는 일회용 클래스입니다. 일회용으로만 사용하기 때문에 이름이 필요 없으며 객체 생성 시에 클래스 정의와 생성을 동시에 합니다. 보통의 자바 클래스는 클래스를 정의하고 클래스명으로 객체를 생성합니다. // 클래스 정의 class MyClass { ... } // 객체 생성 MyClass myClass = new MyClass(); 객체를 생성해주는 new 연산자 뒤에 부모 클래스(인터페이스)의 이름을 사용하여 생성하며, {} 안에 함수를 정의합니다. 하나의 부모 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있습니다. // 생성과 정의를 동시에 Object myClass = new Object() { void myMethod() { ... } }; 학생 클래스의 배열을 나이..

자바(JAVA) - Char to Int : 문자를 숫자로 변환하기

자바에서 문자 타입의 char를 정수 타입의 int로 변환하는 방법입니다. 1. 자동 형변환, 강제 형변환 (X) char c = '1'; int n = c; // == int n = (int)c; System.out.println(n); // 결과: 49 자동 형변환이나 강제 형변환으로 char를 int로 변경하면 문자 '1'의 아스키 코드인 49가 출력되어 올바른 방법이 아닙니다. 2. '0'을 빼주기 (ASCII code 사용) (O) char c = '1'; int n = c - '0'; // == int n = (int)c - '0'; 49 - 48 = 1 System.out.println(n); // 결과: 1 아스키 코드 표를 살펴보면 문자 0 ~ 9는 48 ~ 57의 순서로 되어있습니다. ..

[백준 Baekjoon] 1713번 후보 추천하기 - JAVA

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int M = Integer.parseInt(br.readLine()); int[] fram..

이원 탐색 (BinarySearch) - 자바(JAVA)

c++ 언어로 작성된 수도코드를 자바로 변환한 코드입니다. // 이미 정렬된 배열 a[0]...a[n-1]에서 x = a[j]인 j를 반환 // left, right: 탐색하고자 하는 리스트의 왼쪽, 오른쪽 끝 // 초기값으로 left = 0, right = n-1 // 리스트의 중간 위치 middle = (left + right) / 2로 설정 // a[middle]과 x 비교 // int BinarySearch (int *a, const int x, const int n) int binarySearch(int[] a, final int x, final int n) { // Search the sorted array a[0],...,a[n-1] for x int left = 0, right = n-1;..

선택 정렬 (SelectionSort) - 자바(JAVA)

c++로 작성되어 있는 수도코드를 자바로 변환한 코드입니다. // 정렬되지 않은 정수들 중에서 가장 작은 값을 찾아서 정렬된 리스트 다음 자리에 놓는다. // void SelectionSort(int *a, const int n) void selectionSort(int[] a, final int n) { // n개의 정수 a[0]부터 a[n-1]까지 비감소 순으로 정렬한다. for (int i = 0; i < n; i++) { int j = i; // a[i]와 a[n-1] 사이에 가장 작은 정수를 찾는다. for (int k = i + 1; k < n; k++) if (a[k] < a[j]) j = k; // a[i] 에서부터 a[n-1]까지의 정수 값을 검사한 결과 a[j]가 가장 작은 값 // a..

[백준 Baekjoon] 1990번 소수인팰린드롬 - JAVA

[백준 Baekjoon] 1990번 소수인팰린드롬 - JAVA 문제 풀이 문제에서 주어진 a와 b의 범위가 최대 100,000,000 - 5로 매우 큽니다. 이렇게 큰 범위에서 소수인지 판별할 때는 에라토스테네스의 체를 사용하는 것이 효율적입니다. 다음과 같이 에라토스테네스의 체를 사용하여 소수인지 저장합니다. public static boolean[] isPrime = new boolean[100_000_001]; public static void eratosthenes() { isPrime[0] = isPrime[1] = true; for (int i = 2; i * i

반응형