백준 알고리즘/입출력

백준 2557번 :: Hello World

Sun720 2022. 5. 12. 18:49

▶ 문제 

https://www.acmicpc.net/problem/2557

 

2557번: Hello World

Hello World!를 출력하시오.

www.acmicpc.net

 설명

입출력의 가장 기본이 되는 코드이다.

출력에 System.out.println 만 있다고 알고 있다면 오산이다. 

이외에도 BufferedWriter, StringBuilder, StringBuffer 등의 문자열 관련 클래스를 이용하면

보다 높은 성능의 입출력 코드를 구현할 수 있다. 

 

▶ 문제 풀이

🌱 풀이 1. BufferedWriter 사용

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Main {
    
    public static void main(String[] args) throws IOException{
    
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        bw.write("Hello World!");
        
        bw.flush();
        bw.close();
    }
}

BufferedWriter 는 문자들을 담는 임시메모리라고 생각하면 된다. 

출력할 문자들을 bw에 임시로 담아 코드를 실행할 때 한꺼번에 보여주게 된다. 

따라서 한줄 한줄 출력하는 System.out.println() 보다도 한꺼번에 출력하기 때문에 성능이 좋다.

 

bw.write( ) 메소드 안에 출력할 문자들을 넣으면 되고,

bw.write( ) 메소드를 사용할 시 반드시 IOException 예외처리를 해주어야 한다. 

 

끝에는 bw.flush()와 bw.close() 메소드를 입력하여서 마무리를 짓도록 한다.

flush() 메소드는 문자를 저장하는 버퍼를 비우는 역할을 한다.

 

스트림 클래스 BufferedWriter 의 주요 메소드 ↓

스트림 클래스 BufferedWriter의 주요 메소드
  • newLine() : 개행
  • write(int c) : 문자 쓰기
  • write(char[] cbuf, int off, int len) : 문자 타입의 배열에서 off 인덱스 위치부터 len 만큼까지 문자 쓰기
  • write(String s, int off, int len) : 문자열에서 off 인덱스 위치부터 len 만큼까지 문자 쓰기.
  • flush() : 문자를 저장하는 버퍼를 비우기
  • close() : 스트림 닫기

 

🌱 풀이 2. StringBuilder 사용

public class Main{
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello World!");
        
        System.out.println(sb);
    }
}

 

 

 

append를 하나 더 추가하여 Hello 와 World!를 따로 입력할 수도 있다.

public class Main{
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello");
        sb.append(" World!");
        
        System.out.println(sb);
    }
}

 

 

일단, new StringBuilder() 라고 입력하여 StringBuilder 클래스를 사용하겠다는 선언을 먼저 해준다.

BufferedWriter클래스와 다르게 별도의 import를 하지 않아도 된다. 

그리고 역시 System.out.println 보다도 성능이 좋다.

 

sb.append( ) 메소드를 이용해서 출력할 문자들을 입력하도록 한다. 

sb라는 StringBuilder 에는 입력한 문자들이 저장이 된다. 

 

>>> 만약 개행을 한다면!?

만약 개행을 하게 될 경우에는 개행문자 \n 가 추가가 된다.

 

예를 들어 

 

Hello

World

 

처럼 Hello 와 World 사이에 개행이 이루어졌다면 다음과 같이 \n를 입력하여야 한다.

sb.append("Hello\n");
sb.append("World");

이렇게 되면 StringBuilder 안에는 Hello\nWorld가 저장되어 있게 된다.

append 메소드를 쓸 때마다 문자열을 이어서 저장하는 것이다. 

 

 

🌱 풀이 3. StringBuffer 사용

public class Main{
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("Hello");
        sb.append(" World!");
        
        System.out.println(sb);
    }
}

 

StringBuild 클래스의 사용과 비슷하게 사용되고 원리도 비슷하다.

 

🌱 풀이 4. System.out.println 사용

public class Main {
	public static void main(String[] args) {
    	System.out.println("Hello World!");
    }
}

내가 알고 있던 가장 기본이 되는 출력 방법이다.

개행을 기본으로 하고 있기 때문에 사용하기에 편리하나 성능면에서는 한줄 한줄 호출해야 해서

느리다는 단점을 갖고 있다. 

많은 양의 데이터를 출력해야할 경우엔 좋은 코드 사용은 아니다.

 

▶ Log

 

 

 

 

728x90
반응형

'백준 알고리즘 > 입출력' 카테고리의 다른 글

백준 10869번 :: 사칙연산  (0) 2022.05.14
백준 1001번 :: A-B  (0) 2022.05.14
백준 25083 :: 새싹  (0) 2022.05.14
백준 10171 :: 고양이  (0) 2022.05.13
백준 10718 :: We love kriii  (0) 2022.05.13