간단한 별 찍기 응용 문제다!
사실 브론즈 3 문제라 옛 기억에 코웃음치며 도전했지만, 생각보다 머리를 써야 풀 수 있었다.
시간초과와 메모리는 상관 없는 문제로 판단했다. 섣불리 바로 풀기보단, 먼저 주석코드로 어떻게 풀지에 대해 생각을 했다.
/*
* 만약 5라면, 총 출력은 2 * n - 1개임
* n이 최대 별의 개수는 2*n-1
* 1. 3중 for문으로, 첫 for문은 전체 갯수를 의미함
* 2. j = n - i; -> " " 출력
* 3. k = 2*n-1까지 "*" 출력
* 4. l = n - i; -> " " 출력
* 5. 다시, 반대로,
* */
먼저 내가 푼 코드이다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i = 1; i <= n; i++) {
for (int j = n - i; j > 0; j--)
System.out.print(" ");
for (int k = 0; k < (2*i)-1; k++)
System.out.print("*");
for (int l = n - i; l > 0; l--)
System.out.print(" ");
System.out.println();
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < (2+i)-1; j++)
System.out.print(" ");
for (int k = (2*(n-i)-1); k > 0; k--)
System.out.print("*");
for (int l = 1; l < (2+i)-1; l++)
System.out.print(" ");
System.out.println();
}
}
}
입력 형식도 맞고 출력 형식에 맞게 결과도 잘 나와서 나름 잘 풀었다고 생각했다. 하지만,,
확인해보니, 마지막에 공백을 추가하는 코드때문에 출력 형식이 잘못 된 거였다!
최종코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i = 1; i <= n; i++) {
for (int j = n - i; j > 0; j--)
System.out.print(" ");
for (int k = 0; k < (2*i)-1; k++)
System.out.print("*");
System.out.println();
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < (2+i)-1; j++)
System.out.print(" ");
for (int k = (2*(n-i)-1); k > 0; k--)
System.out.print("*");
System.out.println();
}
}
}
배운점
문제를 꼼꼼히 읽어도 이런 실수를 하게 되었다. 결과가 맞더라도 이런식으로 오류가 떴을 때, 다시한번 차분히 생각해보고 코드 모듈화를 진행하면서 문제점을 찾아야겠다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 2738 - 행렬 덧셈 (0) | 2024.11.27 |
---|---|
[백준 JAVA] 25206 - 너의 평점은 (0) | 2024.11.26 |
[백준 JAVA] 1316 - 그룹 단어 체커 (0) | 2024.11.25 |
[백준 JAVA] 2941 - 크로아티아 알파벳 (0) | 2024.11.25 |
[백준 JAVA] 1157 - 단어공부 (0) | 2024.11.25 |