Hackerrank에서 입출력 소스는 기본으로 제공해주다 보니 타기관 알고리즘 문제를 풀 때 입출력 처리를 못하는 문제가 발생했다.
python에서는 input, c++에서는 cin으로 간편하게 처리 가능이지만, Java IO를 위해서는 Scanner, BufferedReader 객체를 사용해야 한다. 주로 Scanner를 많이 사용하지만 속도측면에서는 BufferedReader가 우수하다.
Scanner, Sysout
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a;
String b;
a = sc.nextInt();
sc.nextLine();
b = sc.nextLine();
// nextInt(), nextLine(), next(), read(), readLine() 등 사용
System.out.println(a);
System.out.print(b); // 개행 없음
}
}
- 주의사항
- nextInt와 nextLine으로 연속 입력 받을 때 nextInt는 숫자 뒤의 \n을 입력받지 못한다. 따라서 두 메서드 중간에 nextLine();을 넣어 정확히 입력받도록 한다.
BufferedReader, BufferedWriter
Scanner로 시간초과 나는 문제가 BufferedReader로 해결되는 경우가 있다. BufferedReader는 이름 그대로 Buffer를 사용하여 읽고 쓴다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] line = br.readLine().split(" ");
int number1 = Integer.parseInt(line[0]);
int number2 = Integer.parseInt(line[1]);
bw.write(String.valueOf(number1 + number2));
bw.flush(); // 남아있는 버퍼 내용 출력
bw.close(); // 버퍼 해제
}
}
- 주의사항
- BufferedWriter의 경우 마지막에 Buffer를 비워주는 과정이 필요하다. bw.flush(); bw.close();
- IoException 처리도 해주도록 한다.
문자열 자료형 변환하기
Wrapper class를 사용한다.
각 Wrapper class는 parse() 메서드를 제공하는데, 이를 통해 문자열을 파싱하여 원하는 데이터 타입으로 변경한다.
// String -> int
Integer.parseInt("1")
// String -> double
Integer.parseInt("1.9")
// String -> float
Integer.parseInt("1.1")
참고
'algorithm > java' 카테고리의 다른 글
null pointer exception 예방하기 (0) | 2021.07.11 |
---|---|
java int와 Integer의 차이 (0) | 2021.07.04 |
hackerrank/arrays/Left Rotation (0) | 2021.06.27 |
hackerrank/warm up/Repeated String (0) | 2021.06.20 |
hackerranck/warm up/jumping on the clouds (0) | 2021.06.13 |