Algorithms/백준

[백준] 10172번 '개' - Java

LEFT 2022. 9. 1. 13:08

<문제 제시>

<예시 입출력>


<문제 해결 과정>

문자열 출력을 이용해 귀여운 강아지를 출력해야한다.

간단한 문제인줄 알았으나 예상치 못한 부분이 있었다.

일반적으로 문자열 출력이라고한다면

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

 

자바 특수문자, 괄호, 백슬래시, 따옴표 출력하기 (백준 10171, 10172번)

자바에서 백슬래시와 따옴표는 문자 그 자체만으로는 출력되지 않는 특수문자이다. 따옴표가 그 자체만으로 출력되지 않는 이유는, 출력문에서는 첫 쌍따옴표부터 그 다음 쌍따

chloe-ki.tistory.com


문제링크)
https://www.acmicpc.net/problem/10172

 

10172번: 개

문제 아래 예제와 같이 개를 출력하시오. 입력 출력 예제 입력 1 복사 예제 출력 1 복사 |\_/| |q p| /} ( 0 )"""\ |"^"` | ||_/=\\__|...

www.acmicpc.net


비슷한 문제)
https://www.acmicpc.net/problem/10171

 

10171번: 고양이

아래 예제와 같이 고양이를 출력하시오.

www.acmicpc.net

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

 

25083번: 새싹

아래 예제와 같이 새싹을 출력하시오.

www.acmicpc.net