자바로 코테 시작하기

._.·2023년 8월 10일
0

알고리즘 공부

목록 보기
13/13

Input 받아오기

https://www.tutorialspoint.com/java/java_files_io.html
자바 튜토리얼에 잘설명되어 있음.

파이썬으로 코테 공부를 해왔던 나에게는 자바의 입력 방식이 상당히 헷갈렸다. 한번 관련된 클래스들을 정리해보자~

InputStream

  • java.io에 속해있는 클래스
  • 1byte씩 입력받을때 사용하는 클래스
  • char 타입의 input stream
  • Standard Input 또한 이 클래스에 속해 있어서 아래와 같이 InputStream input = System.io; 방식으로 input변수를 선언하는 것.
import java.io.IOException;
import java.io.InputStream;

public class main {
	public static void main(String[] args) throws IOException {
    	InputStream input = System.io;
        int val = input.read();
    }
}

InputStreamReader

  • java.io에 속해있는 클래스
  • InputStream의 단점(모든 자료형을 char로 인식)을 해결한 클래스
  • InputStream 클래스를 통해 선언되어야 함. (InputStream 객체를 통해 문자형으로 입력받는 것
import java.io.IOException;
import java.io.InputStream;

public class main {
	InputStream input = System.io;
	InputStreamReader read = new InputStreamReader(input);
    
    char[] vals = new char[4];
    read.read(vals);
}

BufferedReader

  • InputStreamReader의 단점(문자열의 길이가 고정)을 해결한 클래스
  • InputStreamReader로 읽은 변수를 가변 크기로 읽는데 사용 (String 형태로 읽어옴)
import java.io.*

public class main {
	public static void main(String[] args) throws IOException {
    	InputStream input = System.in;
        InputStreamReader read = new InputStreamReader(input);
        BufferedReader br = new BufferedReader(reader);
        
        String vals = br.readLine();
    }
}

StringTokenizer

  • java.util에 속해있는 클래스
  • 토큰이란 지정한 구분자로 쪼개어진 문자열을 일컫는다
생성자 종류
StringTokenizer st = new StringTokenizer(문자열);
StringTokenizer st = new StringTokenizer(문자열, 구분자);
StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false [구분자를 토크으로 넣을지 (default는 false)]);

생성자의 종류는 위와 같다.
대부분 빈칸으로 토큰을 구분하는 경우가 많기 때문에 그러한 경우 가장 상위의 생성자로 호출을 하면된다.

메서드리턴값
nextElemenst()Object
nextTokens()String

보통은 nextTokens 메서드로 입력값을 받아서 int타입으로 변환하는 듯 하다.

그래서?

최종적으로 어떤식으로 사용하는지 보자.
아래와 같이 인풋이 들어온다고 가정하자. 두 정수값을 n, m 에 각각 넣어줄 것이다.
. >> 3 4

추가로 n 줄만큼 정수가 더 입력된다고 가정하자.
. >> 1 2
. >> 1 4
. >> 8 4

import sys.io.*

class Main
{
	public static void main (String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.io));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        
		for(int i = 0; i < n; i++){
        	st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());
        }
    }
}

반드시 알아야 할 것들

자바내에서 지원하는 배열, 문자열, 정수 클래스를 사용하는 법 과 각 클래스의 메스드들에 대해 알아보자.

About String

  • substring
    이 메서드는 i ~ i+1 -1 까지를 잘라 리턴해주는 메서드이다. 아래와 같이 사용 가능하다.
String line = '12345';
int[] arr = new int[5];
for(int i = 0; i < 5; i++){
    arr[i] = line.substring(i, i+1);
}

About Array

Point

  • java.awt.Point
  • Point 클래스는 두개의 값을 묶어서 사용할 수 있게 해줌
  • Queue나 Stack에서도 사용 가능
static Queue<Point> q = new LinkedList<Point>();
q.offer(new Point(nx, ny))
Point tmp_q = q.poll();

0개의 댓글