java

Programing Language/Java

[Java] StringTokenizer, NoSuchElementException 예제

StringTokenizer 문자열이 특정 구분자(delimiter)로 연결되어 있는 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해 이용하는 클래스이다. String.split() 메서드를 사용하여 문자열을 구분할 수도 있다. 일반적으로 코딩할 때 split() 메서드를 사용할 때의 속도와 StringTokenizer를 사용할 때의 속도가 그렇게까지 유의미한 차이가 나진 않지만, 시간제한이 있는 알고리즘 문제를 푸는 등의 경우는 속도가 비교적 빠른 StringTokenizer를 사용하는 게 좋다고 생각한다. split() 메서드는 정규 표현식을 사용해 구분하고, StringTokenizer는 문자를 사용해 구분한다는 점에서도 차이가 존재한다. StringTokenizer 사용법은 다음과 같다. i..

Solution/백준

[백준] 2577번: 숫자의 개수

[백준] 2577번: 숫자의 개수 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net Java 풀이 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new B..

Solution/백준

[백준] 1110번: 더하기 사이클

[백준] 1110번: 더하기 사이클 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net Java 풀이 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws..

Programing Language/Java

[Java] 어노테이션 (Annotation)

어노테이션(Annotation) 어노테이션은 애플리케이션이 처리해야 할 데이터가 아닌, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다. 어노테이션은 클래스, 인터페이스, 어노테이션, 필드, 생성자, 메서드 등 여러 곳에 적용될 수 있다. 어노테이션은 대게 아래 세 가지 용도로 사용된다. 코드 문법 에러 체크 어노테이션은 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다. 예로 @Override 어노테이션이 메서드 앞에 명시된 경우, 이는 해당 메서드가 오버라이드 된 메서드임을 컴파일러에게 알려주는 것이다. 컴파일러는 @Override 어노테이션을 보고 그 메서드가 오버라이드 된 것인지 확인한다. 그리고 오버라이드 된 메서드가 아닌 경우 컴파일 에러를 발생시..

Solution/백준

[백준] 10869번: 사칙연산

[백준] 10869번: 사칙연산 10869번: 사칙연산 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. www.acmicpc.net Java 풀이 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a + b); System.out.println(a - b); System.out.println(a * b); System.out.println(a ..

Solution/백준

[백준] 1000번: A+B

[백준] 1000번: A+B 1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 시간을 죽이기 위해 입출력부터 손을 댄다. 8시간은 너무나 긴 시간,, Java 풀이 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); int B = sc.nextInt(); System.out.println(A + B); } Scanner를 사용하여 풀었지만 수행 시간이 200ms이었다. 다른 사람들 제출 시간을 보니 java 8 기준 68ms..

Programing Language/Java

[Java] 정적 초기화 블록

정적 초기화 블록 정적 멤버는 클래스에 고정된 멤버로, 객체를 생성하지 않고 사용할 수 있다. 정적 필드는 보통 필드 선언과 동시에 초기 값을 주지만, 계산이 필요한 초기화 작업인 경우 static 블록을 생성하여 해당 블록 내에서 초기화해주기도 한다. 정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행되며, 여러 개의 정적 블록이 선언되어 있는 경우 선언된 순서대로 실행된다. 정적 메서드와 정적 블록은 객체가 없어도 실행되기 때문에 해당 {} 내에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다. 그리고 this 키워드도 사용이 불가능하다. 따라서 정적 메서드와 정적 블록에서 인스턴스 멤버를 사용하기 위해서는 객체를 먼저 생성한 뒤 참조 변수로 접근해야 한다. public class MyClas..

Programing Language/Java

[Java] 메서드의 매개 변수 개수가 정해져 있지 않을 때

메서드의 매개 변수 개수가 정해져 있지 않을 때 메서드 선언 시 매개 변수의 개수를 정하지 않고, 메서드 호출 시마다 매개 변수 개수를 바꾸며 호출해야 할 때가 있다. 이때 두 가지 방법으로 매개 변수의 개수를 랜덤 하게 지정할 수 있다. sum 메서드를 예시로 든다. int sum1(int[] values) { int sum = 0; for (int val : values) sum += val; return sum; } int sum2(int... values) {} 첫 번째로는 매개 변수를 배열 타입으로 선언하는 것이다. 메서드 호출 시 배열을 넘겨줌으로써 배열 안에 담긴 데이터를 모두 전달한다. 단점이 있다면 메서드 호출 전 배열을 미리 선언해야 된다는 것이다. int[] values = {1, 2..

Programing Language/Java

[Java] 배열 복사, System.arraycopy()

배열 복사, System.arraycopy() 기본적으로 배열은 한 번 생성한 이후에 크기를 변경할 수 없다. 따라서 기존 배열에서 데이터를 추가하기 위해서 기존 배열보다 저장 공간이 더 큰 새로운 배열을 만든 뒤, 새로운 배열로 데이터를 복사해야 한다. for문을 사용하여 데이터를 복사할 수 있고, for문 말고도 System.arraycopy() 메서드를 사용하여 복사할 수 있다. System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); src는 원본 배열, srcPos는 원본 배열에서 복사를 시작할 데이터의 인덱스 값이다. dest는 새 배열이고, destPos는 새 배열에서 복사한 데이터를 붙여 넣을 시작 인덱스..

Programing/Errors

[IntelliJ][Error] invalid source release

invalid source release 프로젝트 자바 버전과 내 컴퓨터에 설정된 java 버전이 맞지 않아서 발생하는 오류이다. 환경 변수를 직접 수정하여 기본 자바 버전을 변경하는 방법도 있지만, 두 개의 자바 버전을 사용해야 하는 경우도 있으므로 여기서는 해당 프로젝트의 jdk 버전만 변경한다. (Gradle로 생성된 프로젝트 기준 방법이다.) java 11 파일은 이미 있는 상황이라 가정한다. Ctrl + Alt + Shift + S 단축키를 클릭하여 Project Structure에 들어간다. SDK: 부분을 11 버전으로 변경한다. (자신이 사용할 버전으로 변경해주면 된다.) 만약 11 버전이 없는 경우 오른쪽 Edit 버튼을 클릭하여 추가해주어야 한다. + 표시를 눌러 추가하여 사용하면 된다..

Programing Language/Java

[Java] 자바에서의 String 타입

자바에서의 String 타입 String name = "홍길동"; String 객체를 생성할 때 문자열 값인 "홍길동"은 String 객체로 생성되고, name 변수는 생성된 String 객체를 참조한다. String 타입은 클래스 타입으로, 참조 타입이기 때문에 기본 타입과는 달리 힙 영역에 생성되기 때문에 이러한 구조를 가진다. name 변수 자체는 스택 영역에 저장되고, 문자열 리터럴인 "홍길동"은 힙 영역에 String 객체로 생성된다. 그리고 name 변수에 "홍길동"이 담겨있는 String 객체의 주소 값이 저장된다. 문자열 리터럴 자바에서는 문자열 리터럴이 동일하다면 String 객체를 공유한다. String name1 = "홍길동"; String name2 = "홍길동"; 따라서 위와 같은..

Programing Language/Java

[Java] NullPointerException

NullPointerException NullPointerException은 참조 타입(reference type) 변수를 잘못 사용했을 때 발생한다. 기본 타입(primitive type) 변수는 애초에 null로 초기화가 불가능하므로 기본 타입 변수와 관련해서는 NullPointerException이 일어나지 않는다. 참조 타입 변수가 null 값을 가지는 건 힙 영역의 객체를 참조하지 않는다는 뜻이다. 따라서 참조 타입 변수에 저장된 주소 값이 없는 것일 뿐, 참조 타입 변수는 스택 영역에 생성되긴 한다. 참조 타입 변수를 사용한다는 건 객체를 사용한다는 것을 의미하는데, null 값을 참조 타입 변수에 저장한다는 의미는 참조할 객체가 없다는 의미이다. 따라서 null 값을 가진 참조 타입 변수는 ..

밈아
'java' 태그의 글 목록 (2 Page)