티스토리 뷰

문제 풀러가기✍🏻


서론

'별 찍기 -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

 

댓글
공지사항