나를 기록하다
article thumbnail
반응형

백준(baekjoon) 1085 직사각형에서 탈출

자바로 알고리즘 언어 변경..

아직 파이썬, 자바 어느 하나 완벽히 못하기에, 파이썬과 자바 둘 다 하기보단 자바 하나를 확실하게 하자는 마음가짐으로 알고리즘 공부를 자바로 변경하였다. 그래서 브론즈 문제도 근근히 푸는 나이지만 다시 열심히 공부하겠다.

 

 

코드

코드는 전체 코드말고 부분씩 나누어서 살펴보겠다.

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의 특징

  1. 입력된 데이터를 버퍼에 임시로 저장하여 효율적인 입출력을 지원하는 클래스
  2. 주로 InputStreamReader와 함께 사용되어 문자열 데이터를 효율적으로 읽어올 때 활용
  3. 줄 단위로 읽기, 한 줄씩 읽기 등의 편리한 메서드를 제공
  4. 예외 처리가 필요하며, IOException을 처리해야 함
  5. 대량의 데이터를 읽거나 효율적인 입출력 작업을 위해 버퍼링 기능을 사용할 수 있음

InputStreamReader의 특징

  1. 바이트 스트림을 문자 스트림으로 변환하는 역할
  2. 주로 입력 스트림과 연결하여 문자열 데이터를 읽어올 때 사용
  3. 다양한 인코딩 방식을 지원, 문자열을 읽어올 때 인코딩 방식 지정 가능
  4. 예외 처리 필요, IOException을 처리해야 함
  5. 문자 스트림을 다루기 때문에 문자열을 처리할 때 편함
  6. InputStreamReader은 InputStream을 문자 스트림으로 변환하여 문자열 데이터를 읽어오는 기능 제공

		StringTokenizer st = new StringTokenizer(br.readLine()," ");
  1. br.readLine(): 입력된 한 줄을 읽어온다.
  2. StringTokenizer 클래스를 사용하여 읽어온 문자열을 공백 구분자로 나눈다. 이렇게 나눈 토큰들은 'st' 객체에 저장된다.

StringTokenizer의 특징

  1. 주어진 문자열을 구분자를 기준으로 토큰(token)으로 분리
  2. 구분자는 하나 이상의 문자로 이루어질 수 있음
  3. 기본적으로 공백을 구분자로 사용
  4. StringTokenizer 객체는 생성된 후에는 수정 불가, 다음 토큰을 가져오면서 내부 상태가 변경된다.
    • 사용 문법: StringTokenizer tokenizer = new StringTokenizer(분리할문자열, 구분자);
    • 남아있는 토큰 확인: while (tokenizer.hasMoreTokens()) { // 토큰 처리} - 반복문을 통해 순차적으로 토큰 처리할 때 사용
    • 토큰 호출: String 토큰 = tokenizer.nextToken(); - 이 메서드를 호출할 때마다 다음 토큰 반환, 문자열을 작은 조각으로 분리
  5. 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로 알고리즘을 해본 적이 없어서 어색한 문법들과 많이 마주한다. 하루에 한 문제 이상 분석하며 풀도록 노력할 계획이다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...