(백준) 자바 - 2443번 별찍기 6
업데이트:
문제
첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, …, N번째 줄에는 별 1개를 찍는 문제
별은 가운데를 기준으로 대칭이어야 한다.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
*********
*******
*****
***
*
내 코드
맞춘코드
package com.baekjoon;
import java.util.Scanner;
public class backjoon2443 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int star = scanner.nextInt();
// 첫번째 for문
for(int i = 1 ; i <= star; i++) {
//공백찍기
for(int j = 1; j < i; j++) {
System.out.print(" ");
}
//별찍기
for(int k = (2*star)-(i*2-1); k > 0; k--) {
System.out.print("*");
}
System.out.println();
}
scanner.close();
}
}
틀린코드
Scanner scanner = new Scanner(System.in);
int star = scanner.nextInt();
for(int i = 1 ; i <= star; i++) {
for(int j = 1; j < i; j++) {
System.out.print(" ");
}
for(int k = 2*star-i; k > 0; k--) {
if(k >= i) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
풀이
- 알고리즘을 풀다 화가날땐 심호흡을 한번 하고 코드와 잘 대화를 나눠보자. 컴파일러는 거짓말을 하지 않는다..
- 첫 for문은 1로 시작한다. 별찍기 for문에서
(i*2-1)
공식이 음수가 나오지 않도록 하기 위함이다. 개인적으로 숫자를 0부터 시작시키는걸 좋아하지만 사심을 접어두자. - 공백찍기 for문은 0, 1, 2, 3 …. 1씩 늘어나는 형태이다. 첫 줄에서 0부터 시작하는게 중요한 포인트다. 첫 for문이 1로 시작했기에 공백찍기 for문도 1로 시작시킨다. 그리고 공식을
j < i
로 하면 첫줄에 공백이 찍히지 않는다. 즉 0부터 시작하게 된다. - 별찍기 for문은 이미 문제에서 공식을 제시해주었다.
첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개
뒤의 숫자는 -1, -3, -5.. 즉 음수 홀수가 나열되고 있다. 이것을 공식화 시킨다. 그래서 최종 공식은int k = (2*star)-(i*2-1); k > 0; k--
가 된다.
틀린 코드의 원인
모양은 제대로 나오는데, 문제에서 제시해 준 방법대로 하지 않고 나의 창의성을(^^)넣어버려서..
분투의 흔적..
출력 형식이 잘못되었다는 에러를 받았다. 틀린 코드를 잘 보면 별찍기 for문 부분에서 if문을 써서 공백을 한번 더 찍은것이 실패 요인이였다. 앞으론 문제 말을 잘 듣도록 하자.
댓글남기기