PS(Java)/백준

[PS] 백준 단계별로 풀기 - for문, while문

UL :) 2022. 1. 10. 19:09
  • 22-01-10 푼 문제 수 : 14개

 

아래는 백준에 명시된 내용이다.

 

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다. Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다. 또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

 

  • 백준 15552번 빠른 A+B : 자바 입출력 스트림
public static void main(String[] args) throws NumberFormatException, IOException {

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

    int T = Integer.parseInt(in.readLine());

    for(int i=0; i<T; i++) {
        String line = in.readLine();
        StringTokenizer st = new StringTokenizer(line);
        int num = 0;
        while(st.hasMoreTokens()) {
            num +=  Integer.parseInt(st.nextToken());
        }
        out.write(num+"\n");
    }
    in.close();
    out.flush();
    out.close();
}

※ 입출력 스트림이란?

 

 

  • 백준 11022번 A+B - 8 : EOF
public static void main(String[] args) throws NumberFormatException, IOException {

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

    int t = Integer.parseInt(in.readLine());

    for(int i=1; i<=t; i++) {
        String line = in.readLine();
        StringTokenizer st = new StringTokenizer(line);
        int a=0, b=0;
        out.write("Case #"+ i +": ");
        while(st.hasMoreTokens()) {
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
        }
        out.write(a+" + "+b+" = "+(a+b)+"\n");
    }
    in.close();
    out.flush();
    out.close();
}
EOF(End of File) : 더 이상 읽을 수 있는 데이터가 없는 것을 의미하는 용어

EOF로 알고리즘을 처리하려면, 다음 라인으로 넘어갔을 때 입력값이 없는 경우를 체크해 프로그램을 종료해야 한다.

커맨드라인을 통해 입력값을 주는 경우, CTRL+Z를 누른 뒤 엔터키를 누르면 입력이 끝난 것으로 처리된다.

 

 

  • 백준 10951 A+B-4 : StringTokenizer로 문자열 자르기
public static void main(String[] args) throws NumberFormatException, IOException {

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

    String line = "";
    while((line = in.readLine()) != null) {
        StringTokenizer st = new StringTokenizer(line);

        int a=0, b=0;
        while(st.hasMoreTokens()) {
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
        }
        out.write(a+b+"\n");
    }

    in.close();
    out.flush();
    out.close();
}

 

  • 백준 1110번 더하기 사이클
public static void main(String[] args) throws NumberFormatException, IOException {

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

    int n = Integer.parseInt(in.readLine());

    int result=n;
    int cnt=0;

    do {
        int left = result/10;
        int right = result%10;
        int add = left + right;

        result = (right*10) + (add%10);
        cnt++;
    } while(result != n);
    out.write(cnt+"\n");

    in.close();
    out.flush();
    out.close();
}

이 문제는 생각보다 시간이 좀 걸려서.. 넣어봤다.