타오름
조각보
타오름
전체 방문자
오늘
어제
  • 조각보
    • DEVELOPER B 🌱
      • Programming
      • Java
      • Spring | SpringBoot
      • JPA
      • Database
      • DS | Algorithms
      • CS
      • Git | Github
      • IDE

블로그 메뉴

  • HOME
  • TAG
         
        

CALENDAR

        
«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
    

티스토리

hELLO · Designed By 정상우.
타오름

조각보

[Java] 백준 10172번 : 개 (입출력과 사칙연산)
DEVELOPER B 🌱/DS | Algorithms

[Java] 백준 10172번 : 개 (입출력과 사칙연산)

2021. 9. 18. 20:24

 

 

 

1. 문제

 

 

◽  주소 : https://www.acmicpc.net/problem/10172

 

10172번: 개

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

www.acmicpc.net

 

◽  문제 내용 : 

 

 

 

 

2. 풀이

 

 

 

◽ 풀이 1 : System.out.print() 사용 (System 클래스 - 표준입출력) + 이스케이프 시퀀스

 

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("||_/=\\\\__|");     
	}
}

 

 

- 자바 배울때 제일 먼저 배우고 가장 흔하게 사용하는 방법이다.

 

- 하지만 속도면에서 매우 느린편에 속한다. 왜냐하면 리소스를 많이 사용하여 성능 부하를 초래하기 때문이다.

 

- 입출력이 많은 코드에서는 지양하는 것이 좋다. 

 

- 자바에서 출력할 수 없는 문자들이 있다. 이런 문자들을 출력하기 위해서 "Escape Sequance"라는 방식을 이용한다.

 

- Escape Sequance란 출력문에서 백슬래시가 등장하는 순간 다음 문자를 인식해 상황에 맞게 처리하는 것으로 백슬래시(\)+문자 조합이다. 

 

- 백슬래시(\) 역시 출력할 수 없는 문자 중 하나므로 출력하기 위해선 백슬래시앞에 백슬래시를 붙여주면 된다. => \\ 

 

- 밑에 참고사항 참고(Escape Sequance 정리)

 

 

 

 

◽ 풀이 2 : 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("|\\_/|");
		bw.newLine();	
        
		bw.write("|q p|   /}");
		bw.newLine();	
        
		bw.write("( 0 )\"\"\"\\");
		bw.newLine();	
        
		bw.write("|\"^\"`    |");
		bw.newLine();	
        
		bw.write("||_/=\\\\__|"); 
		        
		bw.flush();
		bw.close();
	}
}

 

- BufferedWriter은 Buffer에 있는 IO 클래스로 데이터를 버퍼에 저장해두었다가 한번에 출력하는 방식으로 동작한다.

 

- 데이터를 하나씩 출력하는 것이 아니라 한번에 출력하므로 속도가 빠르다.

 

- 입출력이 많은 코드에서 지향하는 방식이다. 

 

- 사용이 끝났으면 무조건 스트림을 비우고( => flush()), 스트림을 종료해주어야 한다(=>close())

 

- 여기서도 마찬가지로 백슬래시는 출력되지 않는 문자이므로 앞에 백슬래시(\)를 붙여 출력할 수 있게 해준다. 

 

 

◽ 속도  비교 

 

- 1번 풀이 : 

 

- 2번 풀이 : 

 

 

 

- 출력의 양이 약간 늘어나니 BufferedWriter을 사용한 방식이 좀 더 빨라졌다. 

 

 

 

 

3. 참고 

 

 

<Escape Sequance: 이스케입 시컨스>

 

 

이스케이프 시퀀스란 단어 그 자체로 탈출 문자라고 보면 된다. 그럼 무엇에서 탈출하는 걸까?

 

바로 " " 사이에 있는 출력 구문에서 탈출하는 것이라 생각하면 이스케입 시퀀스에 대해 이해하기 쉽다.

 

컴파일러는 " "(' ') 안에 있는 구문을 출력문으로 여기므로 ", '을 통해 출력문의 시작과 끝을 구분한다.

 

만약  " "(' ') 안에서 또 "가 들어있다면 컴파일러는 두번째 만나는 "를 출력문의 끝으로 보고 남은 뒷 부분을 출력하지 않을 것이다.

 

이렇듯  " "(' ')안에서 문자들로 표현할 수 없는 특정 행동(줄바꿈, 탭, 백스페이스 등)과 컴파일러에 혼동을 주는 문자들(\, ', ")을 표현하기 위해서 이스케이프 시퀀스가 필요한 것이다. 

 

이스케이프 시퀀스는 \(백슬래시) + 해당 문자 조합으로 이루어져 있다. 

 

만약 (\, ', ")와 같은 문자를 출력하고 싶다면 해당 문자 앞에 \(백슬래시)를 덧붙여 주면 된다.

 

그리고 출력문 안에서 문자들로 표현할 수 없는 행동들은 정해진 해당 구문을 입력해주면 된다. 

 

 

 

구분 입력 출력
∖
(백슬래시)
∖ Error 출력
∖∖  ∖
'
(작은따옴표)
∖' '
print(" ' "); ' ‥①
" ∖" "
제어 문자 ∖t 탭 (기본 간격: 4)
∖b 한칸 앞으로(백스페이스)
∖n 줄바꿈(newLine)
∖r 행의 처음으로 이동(캐리지 리턴)
∖f 프린트 출력시 현재 페이지 마침
∖0 Null

 

 

+) ① : " "(큰 따옴표)안에 들어있는 '의 경우 컴파일러에 혼동을 주지 않으므로 잘 출력된다. 이 경우엔 ∖(백슬래시)를 쓰지 않아도 출력된다.

 

 

 

    'DEVELOPER B 🌱/DS | Algorithms' 카테고리의 다른 글
    • [Java] 백준 1001번 : A-B (입출력과 사칙연산)
    • Java] 백준 1000번 : A+B (입출력과 사칙연산)
    • [Java] 백준 10171번 : 고양이 (입출력과 사칙연산)
    • [Java] 백준 10718번 : We love kriii (입출력과 사칙연산)
    타오름
    타오름

    티스토리툴바