티스토리 뷰
서론
'별 찍기 -1' 문제에 이어서 BufferedReader, BufferWriter를 연습하는 차원으로 문제에 접근했다.
거기에 다른 패턴의 별 찍기가 나와서 해결 방법을 20분 넘게 고민했다.
시행착오(Trial&Error)
50966965 - 컴파일 에러
Main.java:19: error: illegal start of expression
str -= *;
^
Main.java:19: error: illegal start of expression
str -= *;
^
2 errors
문자 또는 문자열로 *을 써줘야 하는데 "" 또는 ''을 사용하지 않아서 에러가 발생했다.
50966979 - 컴파일 에러
Main.java:20: error: illegal start of expression
str -= *;
^
Main.java:20: error: illegal start of expression
str -= *;
^
2 errors
"" 또는 ''를 사용하지 않은 코드가 남아있어서 동일한 에러가 발생했다.
50966997 - 컴파일 에러
Main.java:20: error: bad operand types for binary operator '-'
str -= "*";
^
first type: String
second type: String
1 error
50967077 - 틀렸습니다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
String str = "";
for(int i = 1; i <= num; i++) {
str += "*";
}
for(int i = num; i <= 1; i--) {
System.out.println(str);
str = str.substring(0, str.length() - 1);
}
br.close();
bw.close();
} catch(IOException e) {}
}
}
51002915 - 컴파일 에러
Main.java:26: error: class, interface, or enum expected
}
^
1 error
}를 하나 더 써서 짝이 맞지 않아 에러가 발생했다.
51002951 - 출력 초과
import java.io.*;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
String str = "";
for(int i = 1; i <= num; i++) {
for(int j = 1; j <= num; j++) {
if(j <= num - i) {
str += " ";
} else {
str += "*";
}
}
System.out.println(str);
}
br.close();
bw.close();
} catch (IOException e) {}
}
}
출력 초과가 왜 났는지는 모르겠다.
51003039 - 틀렸습니다
bw.newLine();을 적어주지 않아서 틀렸습니다가 나왔다.
51003061 - 맞았습니다!
풀이(Solution)
'출력'과 '줄바꿈'을 위해 System.out.print 또는 System.out.println사용했었다.
하지만, 이번 문제에서는 bw.write()와 bw.newLine();을 사용했다.
bw.close() 작성하기 전에 bw.flush()를 작성했는데, 왜 작성하는지 몰라 검색해봐야겠다.
코드
import java.io.*;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
br.close();
for(int i = 1; i <= num; i++) {
for(int j = 1; j <= num; j++) {
if(j <= num - i) {
bw.write(" ");
} else {
bw.write("*");
}
}
bw.newLine();
}
bw.flush();
bw.close();
} catch (IOException e) {}
}
}
BufferedWriter 을 사용하는 방법
'별찍기 -1' 문제를 풀 때만 해도 System.out.println("*");을 사용했었는데, 검색해보니 bw.write("*");을 사용하는 방법이 있다는 것을 알 수 있었다.
bw.write("*"); : 자신을 참조하고 있는 참조변수가 하나도 없는 인스턴스는 더 이상 사용되어질 수 없으므로 가비지 컬렉터에 의해서 자동적으로 메모리에서 삭제된다.
출처 : https://st-lab.tistory.com/35
[백준] 2438번 : 별찍기 - 1 - JAVA [자바]
https://www.acmicpc.net/problem/2438 2438번: 별 찍기 - 1 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 www.acmicpc.net 문제 아마 대부분 언어를 처음 배울 때 반복문에서 가장..
st-lab.tistory.com
bw.flush()
출처 : https://vaert.tistory.com/160
[JAVA] flush()
flush()란 무엇일까? flush()에 대해서 많이 들어 본 것은 사실이다. 이미지 처리 할때는 버퍼의 내용을 비워준다 ? 자바를 공부할 때는 출력한다라는 의미로 이해하고 있다. 지금 네트워크로 넘어와
vaert.tistory.com
'알고리즘 > 문제풀이 - 백준' 카테고리의 다른 글
[백준 10807번] 개수 세기(JAVA) (0) | 2022.10.30 |
---|---|
[백준 10952번] A+B - 5(JAVA) (0) | 2022.10.28 |
[백준 2438번] 별 찍기 - 1(JAVA) (0) | 2022.10.26 |
[백준 2884번] 알람 시계(JAVA) (0) | 2022.10.25 |
[백준 2525번] 오븐 시계(JAVA) (0) | 2022.10.25 |