ejyoo's 개발 노트

10172번 : 개 본문

문제풀이/백준 입출력과 사칙연산

10172번 : 개

ejyoovV 2021. 3. 3. 10:42

👉🏻 4가지 풀이방법을 이용한다.

System 클래스, BufferedReader, StringBuilder, StringBuffer를 이용하여 풀이한다.

👉🏻 이스케이프 사용

큰 따옴표(")나 백슬래시(\)는 단독으로 써서 출력할 수 없다. 이를 출력하기 위해 특정 구문을 사용하는데 이를 이스케이프 한다고 말한다.

결합된 그 문자를 Escape Sequence 라고 하는데 백슬래시(\)와 문자 하나를 결합하여 나타낸다. 우리가 흔히 쓰는 \n \t 같은 것도 이스케이프 시퀀스다.

(이스케이프 시퀀스 = 이스케이프 문자 = 제어문자 모두 같은말)

즉 백슬래시를 출력하면 ("\\")로 해줘야 백슬래시(\) 하나가 출력되며, 백슬래시 두개를 출력하고 싶은경우("\\\\")로 해주어야 2개가 출력된다.

자바에서 사용하는 표준 문자열 이스케이프 리스트다.

👉🏻 방법1(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("||_/=\\\\__|");     
        
        
/* 그 외의 방법들
		System.out.print(
        "|\\_/|\n" + 
		"|q p|   /}\n" + 
		"( 0 )\"\"\"\\\n" + 
		"|\"^\"`    |\n" + 
		"||_/=\\\\__|");
                         
		System.out.printf("%s", "|\\_/|\n
  		|q p|   /}\n
 		( 0 )\"\"\"\\\n
		|\"^\"`    |\n
		||_/=\\\\__|");
        
*/
	}
}

큰 따옴표와 백슬래시는 단독으로 쓰여 출력할 수 없으니 이스케이프 해준다.

👉🏻 방법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();
	}
}

개행을 bw.newLine(); 대신에 각 문자열 맨 마지막에 \n으로 개행해주어도 무방하다.

👉🏻 방법3. Stringbuilder

public class Main {
	public static void main(String[] args){
 
		StringBuilder sb = new StringBuilder();
 
		sb.append("|\\_/|\n");
		sb.append("|q p|   /}\n");
		sb.append("( 0 )\"\"\"\\\n");
		sb.append("|\"^\"`    |\n");    
		sb.append("||_/=\\\\__|\n"); 
        
		System.out.println(sb);
 
	}
}

StringBuilder는 여러 문자열을 append 확장시켜주는 것이기 때문에 sb에 하나의 문자열로 연결된다.

👉🏻 방법4 StringBuffer

public class Main {
	public static void main(String[] args){
 
		StringBuffer sb = new StringBuffer();
		sb.append("|\\_/|\n");
		sb.append("|q p|   /}\n");
		sb.append("( 0 )\"\"\"\\\n");
		sb.append("|\"^\"`    |\n");    
		sb.append("||_/=\\\\__|\n"); 
		
		System.out.println(sb);
	}
}

StringBuilder랑 동일하다. 현 단계에서는 multi-thread를 사용하지 않기 때문에 굳이 StringBuilder를 두고 속도가 상대적으로 더 느린 StringBuffer를 사용할 필요는 없다.

'문제풀이 > 백준 입출력과 사칙연산' 카테고리의 다른 글

10718번 : We love kriii  (0) 2021.03.03
10171번 : 고양이  (0) 2021.03.03
1000번 : A+B  (0) 2021.03.03
1001번 : A-B  (0) 2021.03.03
10998번 : A X B  (0) 2021.03.03