정보
분류 : 반복문
문제
풀이
- 풀이 1 (Scanner + println()) → 360ms
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
for(int i = 0 ; i < a ; i++) {
for(int j = 0 ; j <= i ; j++) {
System.out.print("*");
}
System.out.println();
};
}
}
- 풀이 2 (BufferedReader + BufferedWriter) → 140ms
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// InputStream : 자바의 가장 기본이 되는 입력 스트림
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// OutputStreamWriter : 자바의 가장 기본이 되는 출력 스트림
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int a = Integer.parseInt(br.readLine());
for(int i = 0 ; i < a ; i++) {
for(int j = 0 ; j <= i ; j++) {
bw.write("*");
}
bw.write("\n");
};
br.close();
bw.flush();
bw.close();
}
}
풀이 후기
이중 for문을 사용하여 첫 번째 for문은 행을 표현했고, 두 번째 for문은 각 행에 그려질 별(*)을 표현했다. 이 문제는 다른 블로그를 참고하여 문제를 풀었다. 자력으로 풀지 않아서 여러가지 방법으로 풀었다. 대략 아래와 같다.
a = 5 순서 : i, j |
||||
0, 0 (true) | 0, 1 (false) | 0, 2 (false) | 0, 3 (false) | 0, 4 (false) |
1, 0 (true) | 1, 1 (true) | 1, 2 (false) | 1, 3 (false) | 1, 4 (false) |
2, 0 (true) | 2, 1 (true) | 2, 2 (true) | 2, 3 (false) | 2, 4 (false) |
3, 0 (true) | 3, 1 (true) | 3, 2 (true) | 3, 3 (true) | 3, 4 (false) |
4, 0 (true) | 4, 1 (true) | 4, 2 (true) | 4, 3 (true) | 4, 4 (true) |
이중 for문은 어떤 구조로 돌아가는지부터 이해하는게 좋을 듯 하다. 안쪽 for문이 true일 때엔 j를 1씩 증감시켜 안쪽 for문만 돌고, 안쪽 for문이 false면 바깥 for문으로 가면서 i가 1 증감되는 구조. 별찍기는 해도해도 이해 빠르게 되지 않아 문제를 풀기까지 오래 걸린다🤯
reference
https://darmk.tistory.com/entry/Beakjoon-%EB%B0%B1%EC%A4%80-2438-%EB%B3%84%EC%B0%8D%EA%B8%B0-1-java
'💡문제 풀이 > 백준 - JAVA' 카테고리의 다른 글
A+B - 5 / 10952 (1) | 2023.11.17 |
---|---|
별 찍기 - 2 / 2439 (0) | 2023.11.17 |
A+B - 8 / 11022 (0) | 2023.11.16 |
A+B - 7 / 11021 (0) | 2023.11.16 |
빠른 A+B / 15552 (0) | 2023.11.16 |