algorithm/java

알고리즘을 위한 Java 입출력

아르르르를를르 2022. 2. 7. 14:33

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")

 

 

참고

https://kirade.github.io/algorithm/2017/12/19/java-%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9E%85%EC%B6%9C%EB%A0%A5/

'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