[백준] 10171번 : 고양이 - JAVA [자바]
https://www.acmicpc.net/problem/10171
-
문제
- 4가지 풀이 방법을 이용한다.
System 클래스, BufferedReader, StringBuilder, StringBuffer 를 이용하여 풀이 할 것이다.
기본 사용 방법은 "Hello World" 와 "We love kriii" 에서도 잠깐 언급했으니 참고해보아도 좋을 듯 하다.
- 들어가기 전에 [중요]
자바에서는 몇몇 문자는 단독으로 써서 출력할 수 없다. ( 대표적으로 백슬래시와 큰 따옴표가 있다. )
그래서 문자를 출력하기 위해 조합을 만들어서 출력할 수 있도록 하는데 이를 Escape Sequance 라고 한다.
이스케이프 시퀀스는 백슬래시(\) + 문자 의 조합으로 쓰인다.
아래를 보자.
\ 또한 단독으로 출력이 불가능한 문자다. 실제로 이클립스에서 코딩하면 아래와 같이 경고가 뜬다.
이렇게 말이다. 그럼 어떻게 출력하냐?
간단하다. 백슬래시+문자 조합이라 했으니 백슬래시를 두 번 쓰면 된다.
이렇게 해주고 컴파일을 하면 아래와 같이 역슬래시 하나만 출력이 가능해진다.
- 풀이
- 방법 1 ( System 클래스 - 표준 입출력 )
public class Main {
public static void main(String[] args) {
System.out.println("\\ /\\");
System.out.println(" ) ( ')");
System.out.println("( / )");
System.out.println(" \\(__)|");
}
}
고양이 그림 문자열은 위 문제의 예제출력을 드래그해서 복사하면 된다.
System.out.println(""); 에서 "" 안에 그대로 복사해서 넣으면 이렇게 나온다.
System.out.println( "\\ /\\\n" +
" ) ( ')\n" +
"( / )\n" +
" \\(__)|");
이렇게 바로 출력해도 되지만 가독성을 더 높이기 위해서 수정하고자 한다면 각 + 전에 \n 만 지워서 각 열마다 println(); 으로 나눠주어 위처럼 만들면 된다.
- 방법 2
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("\\ /\\");
bw.newLine(); // 줄 구분자
bw.write(" ) ( ')");
bw.newLine();
bw.write("( / )");
bw.newLine();
bw.write(" \\(__)|");
bw.flush();
bw.close();
}
}
BufferedWriter 을 쓰는 방식이다.
각 라인마다 bw.newLine(); 으로 개행을 해준다. 물론 이를 쓰지 않고 각 write 마다 \n 을 붙여줘도 된다.
이후 bw.flush() 로 스트림에 들어있는 데이터를 비운다.
그리고 bw.close() 로 스트림을 종료해준다.
- 방법 3
public class Main {
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append("\\ /\\\n");
sb.append(" ) ( ')\n");
sb.append("( / )\n");
sb.append(" \\(__)|\n");
System.out.println(sb);
}
}
StringBuilder 를 이용하는 방법이다.
참고로 StringBuilder는 개행해주는 메소드가 따로 없기 때문에 각 열 끝에 \n 으로 개행을 해준다.
- 방법 4
public class Main {
public static void main(String[] args){
StringBuffer sb = new StringBuffer();
sb.append("\\ /\\\n");
sb.append(" ) ( ')\n");
sb.append("( / )\n");
sb.append(" \\(__)|\n");
System.out.println(sb);
}
}
이것도 StringBuilder랑 똑같다.
-
정리
오늘의 가장 중요한 키워드라 하면 이스케이프 문자 (제어문자) 이지 않을까 싶다.
정답비율이 40% 쯤 되는 이유도 따로 통합개발환경 (ex. Eclipse) 에서 코딩해보거나 컴파일 해보지 않고 백준 웹에서 바로 작성하여 제출하다 보니 이스케이프 문자를 생각하지 못하여 이러한 결과가 나왔으리라 본다.
이스케이프 문자에 대해선 따로 포스팅하고 링크를 여기에 다시 걸 수 있도록 하겠다.
'JAVA - 백준 [BAEK JOON] > 입출력과 사칙연산' 카테고리의 다른 글
[백준] 10998번 : A×B - JAVA [자바] (0) | 2020.02.07 |
---|---|
[백준] 1001번 : A-B - JAVA [자바] (0) | 2020.02.06 |
[백준] 1000번 : A+B - JAVA [자바] (25) | 2020.02.06 |
[백준] 10172번 : 개 - JAVA [자바] (2) | 2020.02.03 |
[백준] 2557번 : Hello World - JAVA [자바] (12) | 2020.01.29 |