백준 단계별 풀이
[ 백준 2438번 문제 ] 별 찍기 - 1 - JAVA
anycoding
2025. 6. 10. 22:03
반응형
단계적 풀이라는 카테고리를 달고 운영함으로써
본래의 의미를 지키기 위해 별 찍기 - 10 문제를 포스팅 하려고 했으나
레벨 문제로 존재하기 때문에 1 ~ 10까지 포스팅 해보려고 한다.
별 찍기를 통해 우리의 뇌를 다시 깨어보자.
문제 핵심
- 1 <= N <= 100
- 1개부터 N개까지 별을 차례로 출력
풀이 과정 1
다음과 같은 2중 반복문으로 그릴 수 있다.
1. 1부터 N까지 5개의 라인을 그리는 반복문
2. 라인에서 별을 그려내는 반복문
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= i; j++) {
str.append("*");
}
str.append("\n");
}
이는 출력물이 다음과 같이 나타난다.
물론 틀렸다는 것은 아니지만 다음방법으로도 생각해보는 것이 좋겠다.
풀이 과정 2
다음 코드를 통해 N * N 크기의 보드를 만들어서 별(*)과 공백을 구분하여 값을 넣어 준다.
1. 풀이 과정1 과 방식은 동일하지만, 조건문을 만족하지 않는 나머지에 공백으로 채워 준다.
char[][] board = new char[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(j <= i) {
board[i][j] = '*';
}
else {
board[i][j] = ' ';
}
}
}
이는 다음과 같은 구조를 따른다.
난이도가 어려운 문제에서는 여러 풀이 방식을 생각하기도 어렵고 틀리는 경우가 많기 때문에
이 처럼 쉬운 문제에서 다양하게 시도해 보는 것이 좋다.
전체 코드 1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder str = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= i; j++) {
str.append("*");
}
str.append("\n");
}
System.out.println(str);
}
}
전체 코드 2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
char[][] board = new char[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(j <= i ) {
board[i][j] = '*';
}
else {
board[i][j] = ' ';
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(board[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
}
반응형