<문제 제시>
<예시 입출력>
<문제 해결 과정>
문자열 출력을 이용해 귀여운 강아지를 출력해야한다.
간단한 문제인줄 알았으나 예상치 못한 부분이 있었다.
일반적으로 문자열 출력이라고한다면
System.out.println(" 안녕 ");
처럼 " " (큰따옴표)안에 문자열을 적어서 출력을 한다.
강아지의 귀 부분 문자열을 보면 \ (백슬래시)가 출력되는 것을 확인할 수 있는데,
이를 문자열로 인식하는지의 여부이다.
먼저, \ (백슬래시)가 하나만 쓰인다면 문자열로 인식하지 않는다.
자바에서 출력문 안에서 \ (백슬래시)가 등장하는 순간 그 바로 다음 문자를 인식한 후 특수문자처럼 취급한다.
한마디로 다른 기능을 하는 특수문자가 만들어지는 것이다. 이를 '이스케이프 시퀀스(Escape Sequence)'라고 하며,
특정하게 지정되어있는 경우가 아니라면 에러가 발생하게된다.
\n | 줄바꿈 (라인 피드) |
\r | 줄의 맨 처음으로 (캐리지 리턴) |
\t | 탭 |
\b | 커서를 한 문자 앞으로 (백스페이스) |
\0 | 빈 칸(null) |
지정된 특수문자 (or 이스케이프 시퀀스) 라고 한다면 이렇게 5가지정도가 있으며,
\ (백슬래시)를 문자열로 출력하기위해서는 \\ (백슬래시 2번) 을 써주어 백슬래시를 출력함을 알려야한다.
<\ (백슬래시) 출력>
public class Main {
public static void main(String[] args) {
// ' \ ' 출력을 위해선 \를 하나 더 붙여주어야한다.
System.out.println("|\\_/|");
}
}
이렇게 귀부분을 출력해줄 수 있다.
계속 써내려가다가 또 한번 에러가 발생하였다. 이번엔 " " (큰따옴표)안에 또 다른 따옴표들 (' or ") 을 쓰려고 한다면 어떻게 처리될까하는 의문이었다.
이 역시 위와 마찬가지로 \ (백슬래시) + " (큰따옴표) or ' (작은 따옴표) 처럼 합성해서 써주어야한다.
<" (큰따옴표) 출력 >
public class Main {
public static void main(String[] args) {
// ' \ ' 출력을 위해선 \를 하나 더 붙여주어야한다.
// ' " ' 출력을 위해선 \" 로 작성하여야 한다.
System.out.println("|\\_/|");
System.out.println("|q p| /}");
System.out.println("( 0 )\"\"\"\\");
}
}
강아지의 얼굴부분까지 잘 출력이 가능하였고, 적절한 공백을 넣고 전체 코드를 작성해보았다.
<전체코드>
public class Main {
public static void main(String[] args) {
// ' \ ' 출력을 위해선 \를 하나 더 붙여주어야한다.
// ' " ' 출력을 위해선 \" 로 작성하여야 한다.
System.out.println("|\\_/|");
System.out.println("|q p| /}");
System.out.println("( 0 )\"\"\"\\");
System.out.println("|\"^\"` |");
System.out.println("||_/=\\\\__|");
}
}
이번 코드리뷰에서는 간단한 문자열 출력문 속에서 규칙이 숨겨져 있음을 알 수 있었다.
단순히 " " (큰따옴표)로 감싸준다고해서 내부의 내용이 모두 출력이 되는것은 아님을 깨달을 수 있었다.
'이스케이프 시퀀스'를 알게되었고, 백슬래시 두번을 통해 특수한 문자열 출력이 가능함도 알 수 있었다.
위의 '개'와 비슷한 문제로 '백준 10171번 : 고양이' 문제가 있다.
거기서도 문자열 출력을 다루지만 큰 따옴표 출력에 대해서는 요구하지 않는다.
이번 '백준 10172번 : 개' 예제가 좀 더 복합적으로 출력할 수 있어 블로그에 코드풀이를 작성하게 되었다.
참고)
https://chloe-ki.tistory.com/entry/java-escape-sequence-chart
문제링크)
https://www.acmicpc.net/problem/10172
비슷한 문제)
https://www.acmicpc.net/problem/10171
https://www.acmicpc.net/problem/25083
'Algorithms > 백준' 카테고리의 다른 글
[백준] 2884번 '알람 시계' - Java (0) | 2022.09.03 |
---|---|
[백준] 2753번 '윤년' - Java (0) | 2022.09.02 |
[백준] 10430번 '나머지' - Java (0) | 2022.08.31 |
[백준] 18108번 '1998년생인 내가 태국에서는 2541년생?!' - Java (0) | 2022.08.30 |
[백준] 1008번 'A/B' - Java (0) | 2022.08.25 |