반응형
자바로 알고리즘 언어 변경..
아직 파이썬, 자바 어느 하나 완벽히 못하기에, 파이썬과 자바 둘 다 하기보단 자바 하나를 확실하게 하자는 마음가짐으로 알고리즘 공부를 자바로 변경하였다. 그래서 브론즈 문제도 근근히 푸는 나이지만 다시 열심히 공부하겠다.
코드
코드는 전체 코드말고 부분씩 나누어서 살펴보겠다.
BufferedReader, InputStreamReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader의 특징
- 입력된 데이터를 버퍼에 임시로 저장하여 효율적인 입출력을 지원하는 클래스
- 주로 InputStreamReader와 함께 사용되어 문자열 데이터를 효율적으로 읽어올 때 활용
- 줄 단위로 읽기, 한 줄씩 읽기 등의 편리한 메서드를 제공
- 예외 처리가 필요하며, IOException을 처리해야 함
- 대량의 데이터를 읽거나 효율적인 입출력 작업을 위해 버퍼링 기능을 사용할 수 있음
InputStreamReader의 특징
- 바이트 스트림을 문자 스트림으로 변환하는 역할
- 주로 입력 스트림과 연결하여 문자열 데이터를 읽어올 때 사용
- 다양한 인코딩 방식을 지원, 문자열을 읽어올 때 인코딩 방식 지정 가능
- 예외 처리 필요, IOException을 처리해야 함
- 문자 스트림을 다루기 때문에 문자열을 처리할 때 편함
- InputStreamReader은 InputStream을 문자 스트림으로 변환하여 문자열 데이터를 읽어오는 기능 제공
StringTokenizer st = new StringTokenizer(br.readLine()," ");
- br.readLine(): 입력된 한 줄을 읽어온다.
- StringTokenizer 클래스를 사용하여 읽어온 문자열을 공백 구분자로 나눈다. 이렇게 나눈 토큰들은 'st' 객체에 저장된다.
StringTokenizer의 특징
- 주어진 문자열을 구분자를 기준으로 토큰(token)으로 분리
- 구분자는 하나 이상의 문자로 이루어질 수 있음
- 기본적으로 공백을 구분자로 사용
- StringTokenizer 객체는 생성된 후에는 수정 불가, 다음 토큰을 가져오면서 내부 상태가 변경된다.
- 사용 문법: StringTokenizer tokenizer = new StringTokenizer(분리할문자열, 구분자);
- 남아있는 토큰 확인: while (tokenizer.hasMoreTokens()) { // 토큰 처리} - 반복문을 통해 순차적으로 토큰 처리할 때 사용
- 토큰 호출: String 토큰 = tokenizer.nextToken(); - 이 메서드를 호출할 때마다 다음 토큰 반환, 문자열을 작은 조각으로 분리
- StringTokenizer는 텍스트 처리 및 파싱 작업 등 다양한 상황에 활용 가능
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
st.nextToken()은 다음 토큰을 가져온다. Integer.parseInt()를 사용하여 가져온 토큰을 정수형으로 반환한다. 이렇게 반환된 값들을 x, y, w, h 변수에 저장한다.
int x_min = Math.min(x, w-x); // x축 최소거리
int y_min = Math.min(y, h-y); // y축 최소거리
// x와 y축 최소거리 중 최소값 출력
System.out.println(Math.min(x_min, y_min));
}
}
x축, y축의 최소거리를 각각 구하고 마지막에 x축 최소거리와 y축 최소거리를 비교하여 가장 작은 최소거리를 출력한다.
전체 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
int x_min = Math.min(x, w-x);
int y_min = Math.min(y, h-y);
System.out.println(Math.min(x_min, y_min));
}
}
브론즈 문제지만, Java로 알고리즘을 해본 적이 없어서 어색한 문법들과 많이 마주한다. 하루에 한 문제 이상 분석하며 풀도록 노력할 계획이다.
반응형
'Algorithm > baekjoon' 카테고리의 다른 글
[백준 10250 자바/java] ACM 호텔 (0) | 2023.05.26 |
---|---|
[백준 4153 자바/Java] 직각삼각형 (0) | 2023.05.25 |
[백준 2920 자바/Java] 음계 (0) | 2023.05.23 |
[백준 11720 파이썬/python] 숫자의 합 (0) | 2023.03.08 |
[백준 9086 파이썬/python] 문자열 (0) | 2023.03.05 |