반응형

Java 125

[LeetCode] 4. Median of Two Sorted Arrays (Java)

문제 Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. 크기가 각각 m 및 n인 두 개의 정렬된 배열 nums1 및 num2가 주어질 때, 두 개의 정렬된 배열의 중간값을 반환합니다. The overall run time complexity should be O(log (m+n)). 전체 시간복잡도는 O(log(m+n))이어야 합니다. Example 1: Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2.Example 2:..

[LeetCode] 3. Longest Substring Without Repeating Characters (Java)

문제 Given a string s, find the length of the longest substring without repeating characters. 문자열 s가 주어지면, 반복되는 문자가 없는 가장 긴 부분 문자열의 길이를 찾으세요. Example 1: Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1. Example 3: Input: s = "pwwkew" Output: 3 Explanation: The answer ..

자바(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;..

반응형